2016-11-06 3 views
0

私は以下のように2つのモジュールとのプロジェクトがあります。モジュールはどのように冗長依存なしに影付きのjarに依存することができますか?

プロジェクト

- モジュール1(斜線のjar、LIBのA、Bに依存)

- モジュール2(戦争)

モジュール2をmodule1に依存します。そして、モジュール1のパッケージは、Maven Shade Pluginを使って影付きのjarファイルにパッケージ化されています。 Module2はモジュール1に依存する戦争にパッケージ化されています。

mvnパッケージを実行しようとすると、影付きのjarファイルだけでなく、シェードjarが依存する依存型ライブラリ(A、B)も含まれています。

これは奇妙です。どのように戦争を影付きの瓶だけを含むが、依存する紐を含まないようにすることができますか?アドバイス、ありがとう。

答えて

0

問題は、Mavenはmodule1が陰影付けされていることを知らないということです。 module2の依存関係を解決しようとすると、module1のPOMを調べ、その依存関係はすべてmodule2のWARファイルに含まれています。

次の3つの異なる方法でこの問題を解決することができます

  • がない日陰module1を行います。あなたはなぜこれを行う必要があるのか​​を述べていませんが、それを避けることができれば、これが私の推薦です。
  • module2に依存関係としてmodule1を指定する場合、そのすべての依存関係を除外する:

このように:

<dependency> 
    <groupId>...</groupId> 
    <artifactId>module1</artifactId> 
    <version>${project.version}</version> 
    <exclusions> 
    <exclusion> 
    <!-- 
     Pre-Maven 3.2.1: Repeat groupId and artifactId for all 
     direct dependencies of module1. 

     Maven 3.2.1 and onwards: substitute the '...' below with '*' 
    --> 
     <groupId>...</groupId> 
     <artifactId>...</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
  • module1に取り付けられたMavenのアセンブリを導入し、上記の除外トリックを適用します。私はちょうどこれを試み、それは私のために働いた。私の経験では、カスタマイズされた "バンドル"に依存する場合、アセンブリは影付きのアーティファクトよりも信頼性高く動作する傾向があります。そして、シェーディングをまったく行う必要はありません。
+0

yep、module2がmodule1に依存する場合、すべてのライブラリを除外します。しかし、それはコンパイルの問題を引き起こします(クラスは除外の原因ではありません)。私はそれが戦争パッケージ段階のlibsを除いてより良いと思う。 –

+0

シェーディングされたjarファイルをクラシファイアで作成した場合、module2はシェーディングされたjarファイルに依存しますか? @Daniel –

+0

Module1は、hadoopジョブモジュールであり、module2が実行する必要のあるすべてのhadoopジョブを含んでいるため、影付きです。私は例外を見つけられないクラスで糸に仕事を提出することを避けるために、すべての依存関係で肥満を作ります。 –

関連する問題