[英]How to deal with fat jar dependency
我有一個我在項目中使用的專有依賴項,我無法拒絕。 它建在一個大胖子罐子里,里面收集了所有依賴的包裹。 我的意思是甚至像slf4j-api,apache-commons,javax包等常見的那些。
將它與我自己的聲明的dependecies列表一起使用是有風險的,因為在類加載器中總是會首先加載哪個類 - 在fat jar中我的或者過時的類。
我想知道有沒有解決這個問題的方法? 如何治療這種肥胖的罐子? 我正在使用maven進行依賴管理。
在Maven中,您在POM中定義依賴關系的順序非常重要。 如果按正確順序列出它們,則應按順序將它們添加到jar中,並且文件中的哪個類更高,這是首先加載的類。
如果您將從多個罐子中組合運行時類路徑,那么再次,這是將罐子按正確的順序排列的問題。
我認為還有另一種方式。 我可以將這個庫jar包裝在自己的自定義類加載器中
URLClassLoader c1 = new URLClassLoader(new Url[] { new URL("file:lib/fatJarDep.jar"});
並創建一個工廠,使用這個獨立的類加載器實例化該庫的類
Class.forName("className", true, c1);
如果jar內部提取了所有依賴類,則無法將它們從類加載中排除,因此項目中的相同依賴性可能會發生沖突。
您應該編輯胖罐並手動刪除類以生成輕型版本,然后將其安裝在您的倉庫中並在您的pom中引用它。
如果您知道胖jar的某些功能在您排除某些依賴項時有用,或者您想自己包含它們,則可以嘗試這樣做:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.