java - 当在父 dependencyManagement 中定义依赖版本时,传递依赖未解决

标签 java maven maven-3

我有一个布局如下的多模块项目:

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>

projA2 的 pom.xml 包含:

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

projA1 的 pom.xml 包含:

<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 部分中定义的版本。

最佳答案

我遇到了同样的问题。在我的例子中,如果忘记更新本地存储库中的父 POM。尝试做

mvn install

父模块。

关于java - 当在父 dependencyManagement 中定义依赖版本时,传递依赖未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780274/

相关文章:

java - 了解 getStyleClass().add() 和几行代码

java - 从 Neo4j 2.1.7 升级到 2.2.0

Maven 从错误的位置读取用户配置

dependencies - Maven 无法从 archiva repo 解析项目的依赖关系

java - 我们可以使用其他存储库绝对路径引用maven中的其他存储库模块吗

java - MPChartAndroid 库不显示标记 View

java - 如何从 SOAPEnvelope 响应中获取 byte[]

java - 贾斯珀报告 : How to add External url link in report

java - 使用ByteBuddy Maven插件时如何注册MemberSubstitution?

java - 尝试执行 junit 测试时出错