簡體   English   中英

Maven如何處理從父級繼承的傳遞依賴項?

[英]How does Maven handle transitive dependencies inherited from parent?

給定下面的父子pom以及lib1lib2都包括類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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM