2017-04-07 9 views
0

私はいくつかのコンテナにデプロイされるMaven Scalaプロジェクトを持っているので、スコープprovidedの依存関係のいくつかをマークします。これらの依存関係はコンパイルに使用されますが、 "実行時に提供される"しかし、次のコマンドを実行すると、依存関係を持つ目的のjarファイルが生成されますが、providedとマークされた依存関係も含まれます。Maven:jar-with-dependenciesは "提供された"依存関係をどのように除外するのですか?

mvn clean install assembly:assembly -DdescriptorId=jar-with-dependencies -DskipTests 

この問題に対する既存の回答を試しました。 Excluding “provided” dependencies from Maven assemblyしかし、何らかの理由で、間違った依存関係が選択され、メインコードが失われることさえあります。このOPでは、私はこの問題のよりクリーンな、より最新の解決策を見つけたいと思っています...そこに1つはありますか?

+1

別のMavenプラグインを使う方がよいかもしれません。 [Mavenプラグインの違い(アセンブリプラグイン、jarプラグイン、陰影付きプラグイン)](http://stackoverflow.com/questions/38548271/difference-between-maven-plugins-assembly-plugins-jar-plugins-shaded)を参照してください。 -plugi)。このケースでは、[Shade](https://maven.apache.org/plugins/maven-shade-plugin/)がおそらくあなたに最適でしょう。 –

+0

@JonSampsonありがとう!それは確かに動作します!あなたは答えとしてあなたのコメントを再フォーマットしてください、私は受け入れることができます –

+0

それはあなたのために働いてうれしい!私はより価値のある(私が望む)答えを掲示した。 –

答えて

2

別のMavenプラグインを使う方が良いかもしれません。 Difference between maven plugins (assembly-plugins , jar-plugins , shaded-pluginsを参照してください。 Shadeはおそらくこの場合に最適です。あなたが作成しようとしているのは、uber -jarです。 MavenのWebサイトからのシェードについて

、:

このプラグインは、その依存関係や日陰に含め、ユーバー-瓶にアーティファクトをパッケージ化する機能を提供します - つまり、名前を変更 - 依存関係のいくつかのパッケージ。

Shade Pluginの目標は、ビルドライフサイクルのパッケージフェーズにバインドされています。

<project> 
... 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>3.0.0</version> 
     <configuration> 
     <!-- put your configurations here --> 
     </configuration> 
     <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
      <goal>shade</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
... 
</project> 

注デフォルトの実装では、日陰のバージョンを使用して、プロジェクトの成果物を置き換えること:あなたのシェードプラグインの設定

。両方が必要ですか?ここをクリックしてください:Attaching the Shaded Artifact

一度にいくつかの瓶をマージすることは必ずしも単純ではないので、シェードはResource Transformersという概念を持っています(リンクにはさらにサンプルがあります)。

いくつかの成果物から1つのuber JARにクラス/リソースを集約することは、重複がない限り直接的です。それ以外の場合は、リソースをいくつかのJARからマージするためのロジックが必要です。これは、リソースの変圧器が入り込む場所です。

project siteは実際にはかなり良いです。さまざまな例がたくさんあります。

関連する問題