判斷是否有jar包衝突

2021-08-11 01:52:24 字數 1505 閱讀 5793

***呀,有時候我們需要判斷某個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包...