[英]How does Maven handle transitive dependencies inherited from parent?
給定下面的父子pom以及lib1
和lib2
都包括類foo.bar.Test
。
父母pom
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>foo-parent</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>my.transitive</groupId>
<artifactId>lib1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
兒童絨球
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>foo-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>foo-child</artifactId>
<dependencies>
<dependency>
<groupId>my.transitive</groupId>
<artifactId>lib2</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
如果我將foo-child
作為依賴項包含在myApp
並實例化foo.bar.Test
,那么Maven會解析該類的哪個版本? 又為什么呢?
我的應用程式Pom
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>myApp</artifactId>
<groupId>myApp</groupId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>foo</groupId>
<artifactId>foo-child</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
簡短的答案是:這取決於首先在類路徑上找到哪個。
將兩個相同的類與應用程序打包在一起是不理想的,因為它可能導致許多難以調試的錯誤...如果myApp項目將只是一個jar,則最好使用與以下相同的庫進行編譯在運行時將提供什么。
我相信Maven會使用寫入pom的順序進行構建。 一種查看方式是對myApp運行以下命令:
mvn依賴項:tree -Dverbose
這將按照依規范顯示在類路徑上的順序打印依存關系。 您始終可以使用排除來排除您可能不需要的任何繼承的庫。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.