2017-01-05 10 views
0

あり:自身の依存関係を持つ子ポンポンからジャー

親ポンポン:

<groupId>practice</groupId> 
<artifactId>app</artifactId> 
<packaging>pom</packaging> 
<version>1.0</version> 

<modules> 
    <module>h2db</module> 
</modules> 

<build> 
    <pluginManagement> 
    ... 
    </pluginManagement> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>1.4.185</version> 
    </dependency> 
</dependencies> 

児童ポンポン:

<parent> 
    <artifactId>app</artifactId> 
    <groupId>practice</groupId> 
    <version>1.0</version> 
</parent> 

<artifactId>h2db</artifactId> 
<build> 
    <finalName>h2db</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>h2_server.H2ConsoleServer</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>1.4.185</version> 
    </dependency> 
</dependencies> 

この例では、これらが2(またはを持つ親ポンポンですより多くの)依存関係。子どものポンは必要な依存関係が1つしかありません。私はこの子pomモジュールからjarファイルを作成し、スコープにコンパイルすることができますか? jarをビルドしますが、jarファイルにh2依存性は含まれません。私は子供のpomにmaven-assembly-pluginjar-with-dependenciesを使用しようとしましたが、その結果、親のpomからのすべての依存関係を持つjarを作成しました。私の頭の上オフ

答えて

1

親のpomに依存関係をリストするとき、それは子プロジェクトに必要であるためです。

親のpomからすべての子が必要としない依存関係を削除することを検討する必要があります。

しかし、1つのベストプラクティスは、dependencyManagementを使用することです。親プロジェクトでは、子プロジェクトによって追加されるlog4jライブラリとh2ライブラリのバージョンを指定できます。次に、あなたの子プロジェクトでは、バージョンなしで依存関係をインポートするだけです。

親ポンポン:

<groupId>practice</groupId> 
<artifactId>app</artifactId> 
<packaging>pom</packaging> 
<version>1.0</version> 

<modules> 
    <module>h2db</module> 
</modules> 

<build> 
    <pluginManagement> 
    ... 
    </pluginManagement> 
</build> 

<dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>1.4.185</version> 
    </dependency> 
</dependencies> 
</dependencyManagement> 

児童ポンポン:

<parent> 
    <artifactId>app</artifactId> 
    <groupId>practice</groupId> 
    <version>1.0</version> 
</parent> 

<artifactId>h2db</artifactId> 
<build> 
    <finalName>h2db</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>h2_server.H2ConsoleServer</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
    </dependency> 
</dependencies> 
+0

ありがとう、それは本当に良いです。 – IgorZ

0

、あなたはそれが正確に何が必要ですかmaven-shade-pluginhttp://maven.apache.org/plugins/maven-shade-plugin/examples/attached-artifact.html

わからないを試すことができますが、それはあなたが無視/含める依存関係を指定することができません。

+0

私は100件の依存関係を持っている場合、私は私が必要とするだけではなく含むのそれのそれぞれを無視すべきか? – IgorZ

+1

Hmm ...プラグインの知識は100%ではありませんが、少なくともパッケージにはワイルドカードを使用できますか?ホワイトリストを作成することもでき、残りの部分は無視されるようです。 http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.htmlには、includeの設定方法が示されています。また、 'minimizeJar'というものは未使用のものを投げることができます。 http://stackoverflow.com/questions/8698814/configure-maven-shade-minimizejar-to-include-class-filesの答えはそれについて少し説明しています。 – Pseudos

+0

minimizeJarに感謝します。私はそれがフィルタで作ることができると思う。 – IgorZ

関連する問題