***呀,有時候我們需要判斷某個lib目錄下是否有jar包衝突,這畢竟是個讓人頭疼的問題。
補充一句:這部分**完全可以放在jsp中,即不需要重啟容器也能夠進行檢測。
一般分為兩種情況。
一是已知包裡有某個類,一般用在自己發布的jar包上面,因為可以進行約束。此時通過當前執行緒的類載入器獲取資源,如果有重複說明有衝突。
//寫入需要檢測的class,格式如com.zang.ai.wangshao
private static final listclasslist=arrays.aslist("com.zang.ai.wangshao");
//檢測特定列表class是否衝突
private void checkclasslist()
}//檢測class是否衝突
private boolean checkclassduplicate(string classpath)}}
// 如果有多個,就表示重複
if (files.size() > 1)
}else if(files.size()==0)
} catch (throwable e)
return isduplicate;}
還有一種情況,對於第三方這種不好控制的jar包,我們無法保證其某些class名稱不衝突,此時需要根據其jar包名稱去進行判斷。先根據jar包中manifest.mf檔案去取名稱,沒有的話再通過包名稱獲取。
private static final pattern version_pattern = pattern.compile("(-[0-9][0-9a-za-z_\\.\\-]*)\\.jar");
private map> noepointjar=new hashmap>();
//遍歷jar包
private void getalljarname(string libpath)
if (f.isfile() && f.getname().endswith(".jar")) }}
}catch (exception e)
}//得到jar包包名
private string getjarname(string jarpath)
}if (name == null || name.length() == 0)
if (name == null || name.length() == 0)
}if (name == null || name.length() == 0)
}}catch (ioexception e1)
return name;
}private void putmap(string jarname,string jarpath)else
}//遍歷map
private void checkmap()
}}
感覺自己寫的還算比較清楚吧,有不清楚的話我也是幫不了的。、。看**吧~~~~
jar包公升級,jar包衝突
事件 需要將clientlibrary 1.0.jar公升級為clientlibrary 1.1.jar,對jar包版本進行公升級 檢查原因 檢查備份系統可正常訪問,公升級jar包後出現同樣問題,確定jar的問題,getbean name 引用的spring.jar中的org.springframe...
jar包衝突問題
最終解決方案 1 通過檢視錯誤日誌或者錯誤提示,確定問題出現的類,比如 httpservletrequest.x,那麼httpservletrequest可能就是導致問題出現的衝突類。2 查詢所有包含httpservletrequest的jar包 findclass.sh lib httpservl...
Jar 包衝突的解決
1.導致jar包衝突的原因 我們在發布應用的時候,有時能正常啟動,有時卻報nosuchmehodexception nosuchfieldexception classnotfoundexception或者nosuchmehoderror noclassdeffounderror,而發布用的war包...