2016-06-22 17 views
4

私は他のプロジェクト(プロジェクトB、プロジェクトC ...)に含まれるスプリングブートプロジェクト(プロジェクトA)に取り組んでいます。私はプロジェクトAにいくつかの依存関係を持っていますが、プロジェクトAをインポートするプロジェクトでは、必要なものがいくつかあります。 私は、プロジェクトAをパッケージ化している間にjar依存関係を除外して、実行時にプロジェクトBによって必要なものが提供されるようにする方法を見つけようとしています。プロジェクトAがテスト目的のために独立して実行されている場合、依存関係を利用できるようにしたいと考えています。spring-boot:パッケージングの依存関係を除外します

は、すでに以下の

を試した私が使用して試してみました:

<scope>provided</scope> 
<optional>true</optional> 

それでも瓶は、最終的な成果物で終わります。

はまた、これは単なる春ブート依存関係を削除しますが、この依存性の子供のためのjarがまだで終わるだろう春-ブートのmaven-pluginのに

  <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>repackage</goal> 
         </goals> 
         <configuration> 
          <excludeArtifactIds>spring-boot-starter-redis</excludeArtifactIds> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 

を以下を追加してみました最終的なアーティファクト。

答えて

6

我々はJEEサーバに配備する必要があるアプリケーションのためのwarファイルを作成する必要があります。 warファイルには、必要なjarファイルのみが含まれていなければなりません.JEEサーバーによってすでに提供されているAPIや実装は含まれません。

しかし、テストの目的で、Bootによってデフォルトで提供される実行可能なwarまたはjarファイルを生成する可能性を保持したいと考えています。

これを達成するために、すべてのオプションの依存関係を)と設定しました。たとえば、JDBCドライバのように、開発に使用されたいくつかの直接の依存関係がありますが、展開されたwarファイルには含めたくありません。また、JEEサーバーで必要としない他のスターターやライブラリとの依存関係を提供するブート・メイン・スターターもあります。 spring-boot-starter-tomcatおよびspring-boot-starter-jdbcスターターのケースです。私たちのプロジェクトでは、我々は我々ののpom.xmlファイルにfollowindの依存関係を持っている:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-jdbc</artifactId> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>com.oracle</groupId> 
    <artifactId>ojdbc7</artifactId> 
    <scope>provided</scope> 
</dependency> 

それらの依存関係は、元のjar/warファイルには含まれません。この方法ではなく、春のブートMavenプラグインが含まれていますそれらは再パッケージ化されたjar/warのlib-providedフォルダにあります。

これらの依存関係はJEEサーバーでは認識されませんが、パッケージ化されたアプリケーションは必要以上に大きくなります。解決策は、別の名前で再パッケージ化されたファイルを作成するプラグインだけでなく、開発ツールを除く春のブートMavenを伝えることです:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
     <mainClass>${start-class}</mainClass> 
     <classifier>exec</classifier> 
    </configuration> 
</plugin> 

この道の達人があなたのアプリケーションのための2つのパッケージが生成されます。

  • デフォルトのjar/warパッケージ。指定された依存関係はすべてありません。
  • AはLIB-提供フォルダ内のすべての提供の依存関係とは-jarファイル

のJavaでアプリケーションを実行するための支援を受けて、その名前_exec.jar /の.warで終わるファイルを再パッケージ化あなたのケースでは、同じテクニックを使用して、プロジェクトAがプロジェクトBに含まれるようにパッケージを生成し、プロジェクトAがパッケージをスタンドアロンとして実行できるようにすることができます。

プロジェクトAを単独で実行するためのパッケージを作成する必要がなく、IDEでテストするだけの場合は、pom.xmlからSpringブートMavenプラグインを削除することもできます。

+0

指定したメソッドをで使用し、私の問題を解決しました。 ** artifact-exec.jar **と** artifact.jar **を作成します。** artifact.jar **はライブラリとして、** artifact-exec.jar **は次のように実行することができます。スタンドアロン pomファイルをハックすることなくクリーンなソリューション。 ありがとうCèsar:) – Sandheep

-1

次の操作を行うことができ、プロジェクトBののpom.xml内:私たちの現在のプロジェクトで

<dependencies> 
    .... 
    <dependency> 
     <groupId>com.example</groupId> 
     <artifactId>projectA</artifactId> 

     <exclusions> 
      <exclusion> 
       <groupId>com.foo.bar</groupId> 
       <artifactId>baz</artifactId> 
      </exclusion> 
      .... 
     </exclusions> 
    </dependency> 
    ..... 
    </dependencies> 
+0

チップありがとう。しかし、私はすでに、この除外はプロジェクトBで行うことができることを認識しています。プロジェクトA自体のパッケージ化中にこれを達成する方法があるかどうかを見たいと思っていました。実施しているプロジェクトから不要な依存関係を排除する負担を払うことを望んでいました。 タグののスコープは、最終的なアーティファクトにジャーを含めることは想定されていません。 spring-boot-maven-plugins – Sandheep

+1

によって行われたオーバーライドが、http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/exclude-dependency.htmlに基づいてうまくいっているかどうかを確認したい – WeMakeSoftware

関連する問題