マルチモジュールのmavenプロジェクトがあり、モジュールの1つは配布用です。
Project \
| moduleA \
| moduleB \
| ...
| dist-module \
配布には、簡単に実行したい実行可能jarが含まれています。ただし、実行するには、次のように入力する必要があります。
Java -jar dist-module/target/dist-module-1.0-SNAPSHOT-full-dist/myJar.jar
単純に次のように入力することをお勧めします。
mvn exec:Java \ OR
mvn exec:exec
残念ながら、Javaゴールを取得して.jarを実行する方法を見つけることができません。execゴールは実際にそれを実行しますが、問題があります。jarには組み込みの突堤サーバーが含まれています。 execの動作方法(mavenと同じJVMを使用しないため)のため、プロセスを手動で強制終了しない限りサーバーは終了しません。これも同様に面倒です。
Mavenを使用してこれを行う方法に関する推奨事項はありますか?
編集:
明確にするために、このコマンドは主に簡単な手動の煙のテストに使用されます。ログ出力を読み取り、プログラムが配布環境で適切に起動することを確認します。そのため、ctrl-cがサーバーとmavenの両方を終了させるブロッキング呼び出しになるはずです。
組み込みサーバーは、いくつかの特定のアプリケーションの実行に特化しており、それらを自動的に再ロードしません。したがって、サーバーをMavenとは無関係に長期間実行し続ける必要はそれほどありません。
mvn exec:Javaは、target /以下のコンパイラ出力から直接アプリを実行します-jarから実行する必要はありません:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>default-cli</id>
<goals>
<goal>Java</goal>
</goals>
<configuration>
<mainClass>uk.co.pookey.hibernate.App</mainClass>
<systemProperties>
<systemProperty>
<key>derby.stream.error.file</key>
<value>${basedir}/target/derby.log</value>
</systemProperty>
</systemProperties>
</configuration>
</execution>
</executions>
</plugin>
Mvn exec:execでjarを実行したい場合:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>default-cli</id>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>Java</executable>
<!-- optional -->
<workingDirectory>/tmp</workingDirectory>
<arguments>
<argument>-jar</argument>
<argument>${basedir}/target/hibernate-derby-memory-${project.version}.jar</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
突堤の終了に問題がある場合は、統合テストを実行することをお勧めします(または、突堤を終了せずに突堤のメインスレッドを終了しないか、突堤の停止ポートを使用してください)。 JVMをバックグラウンドで実行し、テスト後にmavenに再度停止させることができます。これには、統合前テスト、統合テスト、統合後テストの3つのフェーズがあります。詳細については http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing を参照してください。 jetty mavenプラグインを使用する場合、pom.xml設定は次のようになります。
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<!-- test start/stop: -->
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy-war</goal>
</goals>
<configuration>
<daemon>true</daemon>
<systemProperties>
<systemProperty>
<name>some.prop</name>
<value>false</value>
</systemProperty>
</systemProperties>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
Jetty mavenプラグインをこれらのフェーズにバインドする代わりに、maven antrunプラグインをバインドして任意のコマンドを実行できます。
ものを実行したい場合は、maven antまたはgmaven(その後、groovy ant builderを使用)を使用します
編集後は DropWizard のようなものを使用しているように聞こえます。あなたはそれらがどうであるかを見たいかもしれません その問題を解決する 。
コメントに基づいて編集:
Spring Boot Mavenは実行可能なwarを作成して実行するため、Spring BootもSpringも必要ありません。ここで私の答えの詳細: spring-boot-maven-pluginを非Springプロジェクトに使用できますか?