2013-02-08 61 views
11

我得與佈局下方的多模塊項目:傳遞依賴沒有解決時,在父母的依賴定義版本dependencyManagement

pom.xml 
projA 
    trunk 
    pom.xml 
    projA1 
     pom.xml 
    projA2 
     pom.xml 

在父母的POM我定義dependencyManagementproperties

<properties> 
    <javaee-api.version>6.0</javaee-api.version> 
    <log4j.version>1.2.11</log4j.version> 
</properties> 
... 
<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>${javaee-api.version}</version> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

的pom.xml爲projA2包含:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
</dependency> 

pom.xml中爲projA1包含:

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>projA2</artifactId> 
    <version>${project.version}</version> 
</dependency> 

在projA1我使用log4j的,但依賴是傳遞的(從projA2)。

現在,當我運行mvn dependency:tree -X我得到:

[WARNING] Invalid POM for mypackage:projA2:jar:1.0, transitive dependencies (if any) will not be available, enable debug logging for more details: Some problems were encountered while processing the POMs: 
[ERROR] 'dependencies.dependency.version' for javax:javaee-api:jar is missing. @ line 37, column 15 
[ERROR] 'dependencies.dependency.version' for log4j:log4j:jar is missing. @ line 56, column 15 

只是低於此線,我得到:

[DEBUG] testArtifact: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] includeArtifact: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] startProcessChildren: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] endProcessChildren: artifact=log4j:log4j:jar:1.2.11:compile 
[DEBUG] testArtifact: artifact=javax:javaee-api:jar:6.0:provided 
[DEBUG] includeArtifact: artifact=javax:javaee-api:jar:6.0:provided 
[DEBUG] startProcessChildren: artifact=javax:javaee-api:jar:6.0:provided 
[DEBUG] endProcessChildren: artifact=javax:javaee-api:jar:6.0:provided 

唯一的解決辦法是在projA2 pom.xml中指定的log4j版本(<version>${project.version}</version>) 。

問:?什麼我做錯了:-(我不想以指定在父母的dependencyManagement部分已定義的版本

回答

0
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
</dependency> 

需要在/projA/trunk/pom.xml而不是/projA/trunk/projA2/pom.xml

當然,如果你想這是可以跨越所有的項目,而不只是projA它必須是在pom.xml

+0

謝謝你的回答!我不想把這個依賴添加到projA中的所有項目中,還有兩個項目,所以你的解決方案將會沒有解決我的問題。 – Arek 2013-02-16 11:07:10

-1

地址:。

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>${log4j.version}</version> 
</dependency> 

到父POM的dependencyManagement部分(就像您對JUnit所做的一樣)。需要log4j的任何孩子可以指定相關性:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
</dependency> 

沒有版本,它會工作,因爲版本將會從父拉。

+0

謝謝你的回答!我知道它應該可以工作,但它不想工作;/... – Arek 2013-02-16 11:07:57

8

我面臨同樣的問題。在我的情況下,如果忘記更新本地存儲庫中的父POM。嘗試做

mvn install 

父模塊。

+2

如果你想建立一個沒有所有孩子的父模塊,使用「mvn install -N」 – CapnSmack 2014-08-01 23:44:41

3

有類似的問題。從本地存儲庫中刪除(手動)涉及的所有項目,然後運行「mvn clean install」稍後爲我工作。

0

我有一個類似的問題:我在我的settings.xml中定義了一個屬性,並將它用於我的poms和我的父pom中的依賴關係中的systemPaths。 「無效」包的忽略會導致編譯錯誤,因爲在類路徑中缺少用作傳遞依賴關係的包。

我發現(轉移到你的問題),如果我打電話給maven與「mvn -Dlog4j.version = 2.1。11「的警告消失,也編譯錯誤。對我來說這不是滿意的解決方案,但它解決了無形傳遞依賴問題。

0

我有完全相同的問題作爲OP。事實證明,這是一個maven bug作爲更新到最新Maven版本(3.3.3寫作的)解決了問題

0

它可以是庫問題搜索你缺少的依存關係找出正確的資料庫,並添加到您的POM這樣的:

<repositories> 
     <repository> 
      <id>jboss-3rd-party-releases</id> 
      <url>https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/</url> 
     </repository> 
    </repositories>