12

以下のようなレイアウトのマルチモジュール プロジェクトがあります。

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

私が定義dependencyManagementした親のpomでproperties

<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

<version>${project.version}</version>唯一の解決策は、projA2 pom.xml でlog4j バージョン ( ) を指定することです。

質問: 何が間違っているのですか :-(? 親のdependencyManagementセクションで既に定義されているバージョンを指定したくありません。

4

7 に答える 7

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

/projA/trunk/pom.xmlの代わりにである必要があり/projA/trunk/projA2/pom.xmlます。

もちろん、これをprojAだけでなくすべてのプロジェクトで利用できるようにする場合は、に含める必要がありますpom.xml

于 2013-02-08T20:12:16.130 に答える
0

OPとまったく同じ問題がありました。最新のmavenバージョン(執筆時点で3.3.3)に更新すると問題が解決したため、これはmavenのバグであることが判明しました。

于 2015-10-05T08:38:32.723 に答える
-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>

バージョンは親からプルされるため、バージョンがなくても機能します。

于 2013-02-11T18:37:08.720 に答える