3

maven 依存関係プラグインによって提供される興味深い機能を発見しました。プロジェクトの 1 つを分析したところ、次の出力が得られました。

[WARNING] Used undeclared dependencies found:
[WARNING]    org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.6:compil
e
[WARNING]    javax.xml.soap:saaj-api:jar:1.3:compile
[WARNING]    org.apache.geronimo.specs:geronimo-annotation_1.0_spec:jar:1.1.1:co
mpile
[WARNING]    org.apache.geronimo.specs:geronimo-jaxws_2.1_spec:jar:1.0:compile
[WARNING]    org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Fin
al:compile
[WARNING]    org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:jar:1.1.2:c
ompile
[WARNING] Unused declared dependencies found:
[WARNING]    junit:junit:jar:4.5:test
[WARNING]    log4j:apache-log4j-extras:jar:1.1:compile
[WARNING]    org.slf4j:slf4j-log4j12:jar:1.6.4:compile
[WARNING]    org.slf4j:slf4j-api:jar:1.6.4:compile
[WARNING]    org.hibernate:hibernate-c3p0:jar:3.6.8.Final:runtime

「未使用の宣言」セクションは私には明らかです。「未宣言の使用」セクションに関しては、プロジェクトで直接使用されているが、Maven によって推移的にクラスパスに含まれている依存関係が表示されます。

最初の「org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.6:compile」を例に取りましょう。この依存関係は、cxf-rt-core-2.2.6 の依存関係であるため、含まれています。ただし、JAR に存在するコードはプロジェクトでも直接使用されます。このプロジェクトが作成された時点で、開発者は別の Java Mail JAR を使用するつもりだったのではないかと考えています。

プロジェクトの 1 つで CXF 2.2.6 を使用したい場合、Geronimo が提供する Java Mail 仕様を推移的な依存関係として自動的に取得します。別の Java Mail API を使用したい場合はどうすればよいですか? search.maven.org を見ると、多くの JAR が Java Mail API を提供していることがわかります。

ありがとう

4

2 に答える 2

1

特定の推移的な依存関係を除外したい場合は、依存関係の除外を使用できます。

<dependency>
  <groupId>...</groupId>
  <artifactId>..</artifactId>
  <version>..</version>
  <exclusions>
    <exclusion>
      <groupId>sample.ProjectB</groupId>
      <artifactId>Project-B</artifactId>
    </exclusion>
    ..
  </exclusions> 
</dependency>

これは、推移的な依存関係の最初のレベルでのみ可能です。

于 2012-05-04T08:28:32.737 に答える
1

プログラマーが Java Mail API jar のバージョンをまったくチェックしていなかった可能性があります。これがまさに「宣言されていない依存関係が使用されています」という警告の理由です。メインPOMに依存関係を直接の依存関係として追加して修正する必要があります。現在動作しているバージョンを使用し (推移的に含まれているため)、元のプログラマーの意図について心配する必要はありません。

次に、推移的なバージョンが破壊的な方法で変更された場合、プロジェクトは直接リストされているため問題ありません。

于 2012-05-04T11:49:37.623 に答える