2014-01-09 19 views
9

みんな!私は、Mavenのシェードのプラグインを使用してjarファイルを取得しようとしてきたが、私はまだ成功を得ることはありません:(マルチモジュールプロジェクトでMavenシェードプラグインを設定するには?

私のプロジェクト構造だこと:

MainModule 
    -Module1 
    -src 
    -pom.xml 
    -Module2 
    -src 
    -pom.xml 
    -pom.xml 

Module1の(のpom.xml):

<parent> 
    <artifactId>MainModule</artifactId> 
    <groupId>com.plugintest</groupId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>Module1</artifactId> 

モジュール2(のpom.xml):

<parent> 
    <artifactId>MainModule</artifactId> 
    <groupId>com.plugintest</groupId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>Module1</artifactId> 

MainModule(のpom.xml):

<groupId>com.plugintest</groupId> 
<artifactId>MainModule</artifactId> 
<packaging>pom</packaging> 
<version>1.0-SNAPSHOT</version> 
<modules> 
    <module>Module1</module> 
    <module>Module2</module> 
</modules> 
<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
</build> 

このコードによれば、2つのjarファイル(Module1-version.jarとModule2-version.jar)が得られます。しかし、それは私が望むものではありません。私は、1つのjarファイル(MainModule-version.jar)を取得し、もう一方のモジュール(Module1とModule2)を含むことを望みます。

このShade Pluginはなぜ機能しないのですか教えてください。

+0

Module2は上記のコードスニペットで "Module1"というラベルが付けられています。 ... – ingyhere

答えて

11

MainModuleは、jarファイルを生成するものではありません。これは... pomファイルのみを生成することができます。子モジュール全体で共有される構成が含まれています。これがシェードプラグインが各モジュールに対して呼び出される理由です。

代わりに、3番目のモジュールを作成します。それをFinalModuleとしましょう。このモジュールの子はMainModuleです。 MainModule pom.xmlから<build>ノード全体をFinalModule pom.xmlに移動します。

ファイル構造:

 
    MainModule 
     -FinalModule 
     -src 
     -pom.xml 
     -Module1 
     -src 
     -pom.xml 
     -Module2 
     -src 
     -pom.xml 
     -pom.xml 

FinalModulepom.xmlは次のようになります。

:最後に

FinalModule(のpom.xml)

<parent> 
    <groupId>com.plugintest</groupId> 
    <artifactId>MainModule</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 
<artifactId>FinalModule</artifactId> 

<dependencies> 
    <dependency> 
     <groupId>com.plugintest</groupId> 
     <artifactId>Module1</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.plugintest</groupId> 
     <artifactId>Module2</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.2</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

、あなたはこのような何かを得る必要があります

[INFO] 
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ FinalModule --- 
[INFO] Building jar: D:\workspaces\java\Parent\FinalModule\target\FinalModule-1.0-SNAPSHOT.jar 
[INFO] 
[INFO] --- maven-shade-plugin:2.2:shade (default) @ FinalModule --- 
[INFO] Including my:Module1:jar:1.0-SNAPSHOT in the shaded jar. 
[INFO] Including my:Module2:jar:1.0-SNAPSHOT in the shaded jar. 
[INFO] Replacing original artifact with shaded artifact. 
[INFO] Replacing D:\workspaces\java\Parent\FinalModule\target\FinalModule-1.0-SNAPSHOT.jar with D:\workspaces\java\Parent\FinalModule\target\FinalModule-1.0-SNAPSHOT-shaded.jar 
[INFO] Dependency-reduced POM written at: D:\workspaces\java\Parent\FinalModule\dependency-reduced-pom.xml 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] Parent ............................................ SUCCESS [0.016s] 
[INFO] Module1 ........................................... SUCCESS [1.654s] 
[INFO] Module2 ........................................... SUCCESS [0.343s] 
[INFO] FinalModule ....................................... SUCCESS [0.953s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
+0

私は以前のコメントを取り戻しました...このアプローチでは '' pomリンクを使う必要があると思っていたので、私は混乱したり挫折したりしました。ありがたいことに、それはしません。それがなくても、集約pomで 'mvn install'を実行すると、シェード設定を含むモジュールは影付きのjarを出力します。 – Andy

関連する問題