5

以下の Maven 依存関係の例では、slf4j 依存関係は log4j 1.2.17 をプルする必要があり、log4j 明示的依存関係は 1.2.15 をプルする必要があります。Maven は log4j をバージョン 1.2.15 に解決しますが、sl4j がより新しいバージョンの log4j を必要としているという警告は Maven によって出力されません。

黙って 1.2.15 バージョンを取得するのではなく、これらのタイプの競合について Maven に警告させるにはどうすればよいですか?

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.2</version>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.15</version>
</dependency>
4

1 に答える 1

10

つまり、これを処理するにはMaven-enforcer-pluginを使用する必要があります。

次のようなエンフォーサープラグインを構成する必要があります

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.1.1</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <DependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

より詳細には、ドキュメントページに記載されているように、トランザクション依存関係の不一致がある次のようなものです。

<dependencies>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.6.1</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.6.0</version>
  </dependency>
</dependencies>  

エンフォーサールールがなくてもサイレントに「動作」しますが、ルールが設定されていると、ビルドが失敗します。

Dependency convergence error for org.slf4j:slf4j-api1.6.1 paths to dependency are:

[ERROR]
Dependency convergence error for org.slf4j:slf4j-api:1.6.1 paths to dependency are:
+-org.myorg:my-project:1.0.0-SNAPSHOT
  +-org.slf4j:slf4j-jdk14:1.6.1
    +-org.slf4j:slf4j-api:1.6.1
and
+-org.myorg:my-project:1.0.0-SNAPSHOT
  +-org.slf4j:slf4j-nop:1.6.0
    +-org.slf4j:slf4j-api:1.6.0

したがって、ユーザーが失敗したビルドに関するエラーメッセージを受け取った場合、次のように除外を行うことで修正できます。

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-jdk14</artifactId>
  <version>1.6.1</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.6.0</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>
于 2012-10-21T07:14:54.687 に答える