カスタムコンテナーの上にあるアプリケーションのデプロイメントの統合テイスティングを実行しようとしています。私のコンテナーはカスタムなので、コンテナーのセットアップにMaven Cargoプラグインを使用できません。
私のコンテナ:
私の問題は、テストの実行中はコンテナーを実行し続ける必要があるため、別のプロセスでコンテナーを実行する必要があることです。さらに、テストにAPIがあり、コンテナの準備ができるまで待機します(タイムアウト付きの一種のルックアップ)。
次の行をpom.xmlに追加しました
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>scripts/start-agent.bat</executable>
</configuration>
</plugin>
これはスクリプトのみを呼び出します。
gs-agent.batの呼び出しを開始します
ただし、mvn execプラグインがスタックし、テストが実行されません。 バッチファイルをmy Java Application? から実行するにはどうすればよいですか)に従って、pom.xmlを次のように変更しました。
<configuration>
<executable>cmd</executable>
<arguments>
<argument>/C</argument>
<argument>start</argument>
<argument>gs-agent.bat</argument>
</arguments>
</configuration>
しかし、これは問題を解決しないようです:
この質問を参照してください: バッチファイルを実行する方法Javaアプリケーション?
Windowsバッチファイルは実行可能ではありません。これらは、cmd
実行可能ファイルによって実行されるスクリプトです。
詳細情報
Execプラグイン ソースコード は、 Apache Commons Executor が実際にコマンドラインを実行するために使用されていることを示します。
ここでできることはたくさんあります。つまり、Apache Commons Executorのドキュメントとその JIRAの問題 ですが、短いバージョンは次のとおりです。これは「Maven」の問題ではなく、問題ですexec()
コマンドを実行するプラットフォーム依存の性質を持つ。
以前この種の問題に取り組んだことがあり、私が常に考案した解決策は、.bat
スクリプトを実際のコマンドに分解して、スクリプトを呼び出すのではなく、exec
プラグインから直接起動することです。
execプラグインはこれを行うことができず、私もその問題を見つけました: http://jira.codehaus.org/browse/MEXEC-87
上記でリンクされているjiraの問題には、機能を備えたexecプラグイン用のforkの言及とリンクがあります。
それ以外は、当分はantrunプラグインを使用する必要があると思います。
これは、実際の構成から取られ、mvn verify
で実行された例です。これは<plugins>
ではなく<pluginManagement>
にある必要があります(execはpluginmanagementにうまく配置できます)。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>pre-integration-test</phase>
<configuration>
<target>
<exec executable="cmd.exe"
spawn="true">
<arg value="/c"/>
<arg value="D:\myfolder\test.bat"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
質問で指定されているように、実行をブロックしたくない場合は、ここでspawn="true"
が重要です。ブロックしてすぐに出力を表示する場合は、falseに設定します。
私の場合、npmとngで問題が発生しました。根本的な問題はexec-maven-plugin
はshスクリプト(拡張機能なし)を実行しようとしました。
名前の変更
C:\Users\User\AppData\Roaming\npm\ng
〜C:\Users\User\AppData\Roaming\npm\ng.sh
そして
C:\apps\nodejs\npm
〜C:\apps\nodejs\npm.sh
問題を解決しました。
Fallowing Codeは私に適しています
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks>
<exec dir="${project.basedir}" executable="Script.bat" failonerror="true">
</exec>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
ソース https://maven.Apache.org/guides/mini/guide-using-ant.html