2009-05-03 23 views
25

推移的な依存関係としてリストされているため、プロジェクトにjarファイルが含まれています。Maven:1つの推移的な依存関係を削除

しかし、私はそれが必要ないだけでなく、jarファイル内のクラスが別のjarファイルに必要なクラスをシャドウするので、問題を引き起こすことを確認しました。

推移依存から1つのjarファイルを削除するにはどうすればよいですか?

答えて

30

:mavenのwebsiteから

除外メカニズムを使用することですが、多くの成果物が無視したい過渡的依存性が同じ場合、多数の除外を避けるために、次のハックを代わりに使用することをお勧めします。除外を指定するのではなく、 "提供された"スコープで追加の依存関係を定義します。これは実行時にこのアーティファクトを手作業で提供してくれるので、パッケージ化されないことをMavenに伝えます。例えば:

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
      <version>2.5.6</version> 
    </dependency> 
    <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
      <scope>provided</scope> 
    </dependency> 

副作用:あなたはにアーティファクトツー・無視すること、およびそのPOMは、ビルド時に取得されるのバージョンを指定する必要があります。これは通常の除外では当てはまりません。ファイアウォールの背後にあるプライベートMavenリポジトリを実行すると、これは問題になるかもしれません。

3

問題のある成果物を明示的に除外することでこれを行うことができます。問題を含んで依存関係を取り、それをマーク除外される:

 <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring</artifactId> 
       <version>2.5.6</version> 
       <exclusions> 
         <exclusion> 
           <groupId>commons-logging</groupId> 
           <artifactId>commons-logging</artifactId> 
         </exclusion> 
       </exclusions> 
     </dependency> 
15

正しい方法:あなたは次のように依存関係を除外することができ

<dependency> 
    <groupId>group-a</groupId> 
    <artifactId>artifact-a</artifactId> 
    <version>1.0</version> 
    <exclusions> 
    <exclusion> 
     <groupId>group-c</groupId> 
     <artifactId>excluded-artifact</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
+0

ole メソッドでjar依存関係からservlet-apiを除外しようとしていましたが、それは私のためには機能しませんでしたが、この方法を試してみました。ありがとう。 – Aaron

+0

に基づいて依存関係を除外しなければならないとき、これは私のために働いていました。ありがとう! –

+0

依存関係がJREに含まれている場合は、_system_スコープを使用することもできます。 jaxb-api 2.0とJRE 6の例:[Maven System Dependencies](http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies)を参照してください。 –

関連する問題