2016-07-11 16 views
1

マルチモジュールSpring-Bootアプリケーションに問題があります。Spring-Bootで実行可能なJARの代わりに単純なJARを作成します。

サービスのために使用するモジュールが1つあります。コア - モジュールです。また、ビュー関連クラスのモジュールは、ウェブ - モジュールです。 両方とも -Moduleにあります。ここでは、 "spring-boot-starter"のような依存関係を追加し、両方のモジュールで使用できます。問題の今

私は、組み込みTomcatでウェブ -Moduleを実行し、ウェブ -moduleで依存関係としてコア -Moduleを持っていると思います。私はちょうどのmaven-jarファイル・プラグインを含めるとコア -Moduleのjarファイルを作成することになり、他の春のプロジェクトで

このSpring-Bootプロジェクトの問題は、maven-jar-pluginが "spring-boot-starter"で既に設定されていることです。また、mainClassが必要です。これはウェブ - モジュールだけです。

「春・ブート・スターター」-POM
  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>${start-class}</mainClass> 
          <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

は、そのモジュールで「スタートクラス」を必要とせずにJARとして-Module コアをパッケージ化する方法はありますから

小抜粋?

+1

あなたは[ '春ブーツ非実行可能jar'](https://www.google.com/#q=spring+boot+non+executable+jar)を検索する場合、あなたは見つけるでしょう[作成Spring起動時の非実行可能なJAR(除外あり)](http://docs.spring.io/spring-boot/docs/current/reference/html/howto-build.html#howto-create-a-nonexecutable-jar)ドキュメンテーション。 – Andreas

+0

@Andreas問題はこれにはまだmainClass-Attributeが必要だということです。設定はSpringファイル内にあるので。元の質問にSpring-Configurationを添付しました。 –

答えて

0

あなたのアプリを実行するために埋め込みのTomcatを使用している場合は、あなたのWebアプリケーション用の標準のSpring Boot fat jarがほしいと思わないでしょうか?その場合は、Webモジュールをpomのコアモジュールに依存するものとしてマークし、プロジェクトをビルドします。

別のユースケースがあります。これは、jarファイルを分離する必要がありますか?

単一のマルチモジュールプロジェクトの一部として完全に別個のモジュールまたはモジュールとしてモジュールを構築していますか?違いは後者です。モジュールを指定するルートにpomがあります。私は具体的にMavenの構文を忘れるので、私の例はGradle(マルチモジュールビルド用のMavenドキュメントはhereです)です。申し訳ありません。

baseProject 
|----web-module 
|----core-module 

baseProjectのbuild.gradle:

project(':web-module') { 
    dependencies { 
     compile project(':core-module') 
    } 
    evaluationDependsOn(':core-module') 

} 

Mavenは類似した構造を有しています。あなたはドキュメントを見直すべきですが、私は以下のように親モジュール内でモジュールの順序を正しく指定し、Webモジュールのpomに依存関係を含めることだけが必要だと思います。

親POM:

... 
<modules> 
    <module>core-module</module> 
    <module>web-module</module> 
</modules> 

ウェブPOM:

<project ...> 

<parent> 
    <groupId>com.example</groupId> 
    <artifactId>simple-parent</artifactId> 
    <version>1.0</version> 
</parent> 

<artifactId>web-module</artifactId> 
<packaging>war</packaging> 
<name>My web-module</name> 
<dependencies> 

... 
    <dependency> 
     <groupId>com.example</groupId> 
     <artifactId>core-module</artifactId> 
     <version>1.0</version> 
    </dependency> 
</dependencies> 
... 

コアPOMのみ上記ウェブモジュールのようparentセクションを含める必要があり、そうでなければ同じであるべきです。

+0

_web_モジュールをfat-JARとして使用し、_core_-moduleを依存関係にしたいとします。 _core_モジュールを依存関係にするには、.m2ディレクトリにインストールできる「製品」を作成する必要があります。おそらく、これを達成するためのより簡単な方法があります。 –

+0

@Johannes Esseling私は、マルチモジュールプロジェクトの構築を含む私の答えを更新しました。あなたがコアモジュールをリポジトリに公開し、それを取得することを期待しているようです。マルチモジュールプロジェクトとしてプロジェクトを作成することで、それを回避できます。 – JudgingNotJudging

0

私は答えを見つけました。 @judgingnotjudgingの説明のようにアプリケーションを設定しました。違いは -POMで、私はこれを入れていたということでした。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

それは子供-モジュールにJARファイルのデフォルトの作成を防止しました。この問題を解決するには、のみをウェブ -Moduleに含めます。

そのように春ブーツはウェブ -Moduleとコア -Moduleから、単純なJARから脂肪-JARを構築します。

1

fat-JARを無効にして、オリジナルを置き換えて、を設定することで、リポジトリにインストールすることはできないようです。 http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/maven-plugin/examples/repackage-disable-attach.htmlから撮影

:デフォルトでは

、再パッケージの目標は で実行可能なものを、元のアーティファクトを交換します。あなただけのオリジナルのjarファイルを展開する必要があると はまだ通常のファイル名を使用してアプリケーションを実行することができる場合は、次のように プラグインを設定:

<project> 
    ... 
    <build> 
    ... 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.5.1.RELEASE</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      <configuration> 
       <attach>false</attach> 
      </configuration> 
      </execution> 
     </executions> 
     ... 
     </plugin> 
     ... 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 

2つのアーティファクトを生成します。この設定:元のものと再パッケージ化の目標によって生成された実行可能なカウンタ部分。元のものだけがインストール/展開されます。

1

この方法でspring-boot-mavenプラグインを無効にすることができます。

 <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
関連する問題