[英]maven dependency tree showing dependency that is not present in parent jar?
我在模塊上運行了mavendependency:tree。 這是此輸出的代碼段。
[INFO] +- org.springframework:spring-webmvc:jar:4.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:4.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-expression:jar:4.0.2.RELEASE:compile
[INFO] | \- org.springframework:spring-web:jar:4.0.2.RELEASE:compile
[INFO] +- javax.servlet:javax.servlet-api:jar:3.0.1:provided
[INFO] +- org.apache.httpcomponents:httpcore:jar:4.3.2:compile
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.2:compile
[INFO] | \- commons-codec:commons-codec:jar:1.6:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.2.1:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- com.fasterxml.jackson.core:jackson-core:jar:2.5.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.5.0:compile
[INFO] +- com.newrelic.agent.java:newrelic-api:jar:3.6.0:compile
我從org.apache.httpcomponents:httpclient:jar:4.3.2
看到了對commons-codec:commons-codec:jar:1.6
transitive dependency
。
但我在$M2_HOME/org/apache/httpcomponents/httpclient/4.3.2/httpclient-4.3.2.jar
找不到此jar。
我也沒有在Eclipse的“引用的庫”或“ maven依賴項”中看到此jar。 我的項目Base64Util
來自commons-codec
類,編譯良好。
依賴關系在POM中定義,您可以在此處看到:
http://central.maven.org/maven2/org/apache/httpcomponents/httpclient/4.3.2/httpclient-4.3.2.pom
commons編解碼器具有編譯依賴性。 它具有對httpcomponents-client的父pom引用,該引用將版本定義為1.6,如下所示:
因此,maven輸出正確,並且將提供庫。 現在,如果您在代碼中使用該庫中的類,則建議在pom中具有顯式依賴項。
Maven構建此依賴關系樹以查看需要哪些庫,因為每個jar僅包含其自己的類,而不包含依賴項。 Maven將驗證是否有多個庫要求相同的依賴關系,並且所使用的版本將與兩個庫一起使用。 有時,它找不到解決方案,並且會因依賴關系解決錯誤而一氣之下。 當它具有庫列表時,它將下載它們並將它們放在java類路徑上進行編譯,等等。
這是必需的,因為普通的Java類加載器會將所有類放在同一名稱空間中。 情況並非總是如此,例如servlet容器每次大戰都會創建一個類加載器,osgi容器每個捆綁創建一個類加載器,但是所有這些系統都是有代價的:奇怪的ClassCast異常,因為一個類在多個類加載器中加載。 這就是jars在獨立的uberjar中不包含其依賴項的原因 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.