2013-02-08 88 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>