2017-07-20 18 views
1

私のプロジェクトを構造化する正しい方法と、それをどのように構成して個々のコンポーネントをすべてビルド/テスト/コマンドをビルドする?Mavenで共有ライブラリを使用してプロジェクトを整理するにはどうすればいいですか?

私は複数のモジュールを含むMavenプロジェクトを持っています - Springアプリケーションとそれらの間で依存関係として共有される "ライブラリ"。ライブラリと一緒にすべてのアプリケーションをビルドできるようにして、モジュールのいずれかが変更されたとき(libまたはapp)に統合テストを実行できるようにしたい。

理想的には、各コンポーネントをコンパイルし、アプリケーション/ライブラリごとに単体テストを実行し、統合テストを実行し、各コンポーネントを実行可能なjarにパッケージ化することができます。ある時点で、このプロセスは、より高度なシステムテストを実行するJenkinsサーバー上で実行されます。

現在、私はmvn clean install spring-boot:repackageを使用しています。これはアプリごとに個別に動作します。実行中はMain Project/App1/です。しかし、私がプロジェクトルートMain Project/から実行すると、ライブラリにmain-classがないため、ライブラリがspring-repackageされないというエラーが出ます。これはライブラリです。エントリポイントは必要ありません。

これは、Mavenでマルチアプリケーションプロジェクトを構築する正しい方法ですか、何か非常に間違っていますか?

プロジェクト構造がある:代わりに、コマンドラインでゴールを実行しているの

Main Project 
|-SharedLibrary/ 
    |-src/ 
    |-pom.xml 
|-App1/ 
    |-src/ 
    |-pom.xml 
|-App2/ 
    |-src/ 
    |-pom.xml 
|-App3/ 
    |-src/ 
    |-pom.xml 
|-pom.xml 
+0

メインプロジェクトのPOMにモジュールとしてアプリケーションを追加しましたか? – Christian

+0

こんにちはクリスチャン、はい、メインプロジェクトに対して 'mvn clean install'を実行すると、すべてのテストが実行されます。しかし、ライブラリアーチファクトだけが正しくビルドされます。他のものは 'mvn clean install spring-boot:repackage'でビルドする必要があります。 –

答えて

1

、のPOMへSpring Boot maven plugin repackage goalするための構成を追加することを検討。構成が追加された場合、再パッケージはmvn clean installコマンドの一部として実行されます。

まず、pluginManagementセクションの親のPOMにプラグインを追加します。これにより、すべてのモジュールでSpringブートのバージョンが一貫していることが保証されます。

<pluginMangement> 
    <plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>YourSpringBootVersion</version> 
    </plugin> 
    </plugins> 
</pluginMangement> 

次に、SpringブートモジュールのPOMにrepackageという目標を追加します。この目標は、ドキュメントごとにデフォルトでフェーズpackageにバインドされます。

<plugins> 
    <plugin> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>spring-boot-repackage</id> 
     <goals> 
      <goal>repackage</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

代わりに、アプリは4つのモジュールの3にrepackageを使用しているので、あなたは親に上記の設定を追加することができます。しかし、そうすることで、動作しないすべてのモジュールのプラグインの目標が実行されます。

<plugins> 
    <plugin> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>spring-boot-repackage</id> 
     <phase>none</phase> 
     <goals> 
      <goal>repackage</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

<phase>none</phase>の追加を:このオプションを選択するのであれば、あなたは、ライブラリで実行するプラグインないを指示する必要があります。これにより、このモジュールのプラグインゴールだけが無効になります。

+0

これは私の問題を完全に解決しました - 私は非常に単純なことをやろうとしていたことを知っていました。 それぞれのコンポーネントが同じ方法で構築されると仮定するのではなく、各コンポーネントのビルドプロセスを個別にpomで指定する方法を選びました。正当化は、現時点ではビルドプロセスがそれほど複雑ではなく、ソースや依存関係と同じくらい頻繁に反復されないということです。つまり、ビルドには私のプロジェクトをビルドするように指示することができます。そして、各アーティファクトはビルドの仕方を指定する責任があります。 –

関連する問題