2

Webプロジェクトで次のライブラリを使用しています。

  • slf4j-log4j12-1.6.4.jar
  • slf4j-api-1.6.0.jar
  • log4j-1.2.16.jar
  • jcl-over-slf4j-1.6.0.jar

私が戦争を組み立てるとき、余分なcommons-logging-1.0.4.jarライブラリがWEB-INF/libにコピーされます。これは、commons-logging-1.0.4.jarに依存している私のライブラリの1つが原因だと思います。commons-logging-1.0.4.jar(jcl-over-slf4j-1.6.0.jarがすでにここにあるため)を除外したい

<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <exclusions>
           ...
    </exclusions>
</dependency>

この目的のために、pom内のどのライブラリがcommons-loggingに依存しているかを見つける必要があります。

4

2 に答える 2

6

コマンドを使用して依存関係ツリーを見つけることができますmvn dependency:tree

ツリーからアーティファクトを除外できます。

出力例:

[INFO] |  +- org.seleniumhq.selenium:selenium-htmlunit-driver:jar:2.20.0:test
[INFO] |  |  +- org.seleniumhq.selenium:selenium-api:jar:2.20.0:test
[INFO] |  |  +- net.sourceforge.htmlunit:htmlunit:jar:2.9:test
[INFO] |  |  |  +- xalan:xalan:jar:2.7.1:test
[INFO] |  |  |  |  \- xalan:serializer:jar:2.7.1:test
[INFO] |  |  |  +- commons-collections:commons-collections:jar:3.2.1:test
[INFO] |  |  |  +- commons-lang:commons-lang:jar:2.6:test
[INFO] |  |  |  +- org.apache.httpcomponents:httpmime:jar:4.1.2:test
[INFO] |  |  |  +- commons-codec:commons-codec:jar:1.4:test
[INFO] |  |  |  +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.9:test
[INFO] |  |  |  +- xerces:xercesImpl:jar:2.9.1:test
[INFO] |  |  |  |  \- xml-apis:xml-apis:jar:1.3.04:test

依存関係が推移的である場合、上記のツリーに基づいて次のように実行できます。

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-htmlunit-driver</artifactId>
    <version>2.20</version>
</dependency>
<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.9</version>
    <!-- i dont want u -->
    <exclusions>
        <exclusion>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
        </exclusion>
    </exclusions>
</dependency>
于 2012-04-25T07:32:48.677 に答える
0

WAR オーバーレイ機能を使用していて、依存関係ツリーに関する他の回答が機能しない場合は、問題のライブラリがオーバーレイされた WAR ファイルの 1 つを経由していないことを確認してください。オーバーレイの一部として、Maven はオーバーレイされた WAR ファイルのWEB-INF/libフォルダーを展開します。基本的に、結果の WAR ファイルにはそこにあるすべてのものが含まれます。

この方法で入ってくるファイルの一部を除外するには、WAR プラグインのdependentWarExcludes機能を使用できます: http://maven.apache.org/plugins/maven-war-plugin/examples/war-overlay.html

于 2012-04-25T07:47:19.503 に答える