25

カスタムコンテナの上にアプリケーションのデプロイの統合テイスティングを実行しようとしています。私のコンテナーはカスタムであるため、MavenCargoプラグインを使用してコンテナーをセットアップすることはできません。

私のコンテナ:

  • テストが実行されるマシンのパスにある適切なbatファイルを介して開始する必要があります。
  • すべての統合テストを含む単一のMavenモジュールがあるため、テストの完了後にプロセスをシャットダウンする方法を知りたい場合でも、手動で閉じることができます。

私の問題は、テストの実行中はコンテナを実行し続ける必要があるため、コンテナを別のプロセスで実行する必要があることです。さらに、テストには、コンテナーの準備ができるまで待機できる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プラグインがスタックし、テストが実行されません。Javaアプリケーションからバッチファイルを実行するにはどうすればよいですか?、pom.xmlを次のように変更しました。

 <configuration>
                <executable>cmd</executable>
                <arguments>
                    <argument>/C</argument>
                    <argument>start</argument>
                    <argument>gs-agent.bat</argument>
                </arguments>
            </configuration>

しかし、これは問題を解決していないようです:

Mavenが停止しました

4

5 に答える 5

23

execプラグインはこれを行うことができず、私もその問題を発見しました:http: //jira.codehaus.org/browse/MEXEC-87 (コードハウスのランプダウンのためにリンクが停止しました。Webアーカイブから見つけることができます)

上記のリンク先のjiraの問題には、機能を持つexecプラグインのフォークについての言及とリンクがあります

それ以外は、とりあえずantrun-pluginを使う必要があると思います。

これは、作業構成から取得した例で、を使用して実行し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に設定します。

于 2012-09-26T15:11:46.113 に答える
8

この質問を参照してください:Javaアプリケーションからバッチファイルを実行するにはどうすればよいですか?

Windowsバッチファイルは実行可能ではありません。これらは、実行可能ファイルによって実行されるスクリプトですcmd

詳しくは

Execプラグインのソースコードは、ApacheCommonsExecutorが実際にコマンドラインを実行するために使用されていることを示しています。

ここでできることはたくさんあります。つまり、Apache Commons ExecutorのドキュメントとそのJIRAの問題ですが、短いバージョンは次のとおりです。これは「Maven」の問題ではなく、プラットフォームに依存する性質の問題です。exec()コマンドの実行。

私は以前にこの種の問題に取り組んだことがありますが、私が常に考案する解決策は、スクリプトを呼び出すのではなく、.batスクリプトを実際のコマンドに分解し、プラグインから直接起動することです。exec

于 2012-09-26T13:51:32.053 に答える
1

休閑コードは私のために働きます

<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

于 2016-02-01T14:14:50.723 に答える
1

私の場合、npmとngで問題が発生しました。根本的な問題はexec-maven-plugin、shスクリプト(拡張機能がない)を実行しようとしたことでした。

名前の変更

C:\Users\User\AppData\Roaming\npm\ngC:\Users\User\AppData\Roaming\npm\ng.sh

C:\apps\nodejs\npmC:\apps\nodejs\npm.sh

問題を解決しました。

于 2017-02-03T04:45:26.020 に答える
0

exec-maven-pluginを使用する場合は、引数を使用してバッチスクリプトを実行する例を次に示します。たとえば、次のようなものを実行します。

.\test.bat arg1 arg2 arg3

以下をpom.xmlに追加します。

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
    <executions>
        <execution>
            <id>exec-test</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <executable>cmd</executable>
        <workingDirectory>./</workingDirectory>
        <arguments>
            <argument>/c</argument>
            <argument>start</argument>
            <argument>""</argument>
            <argument>exec.bat</argument>
            <argument>arg1</argument>
            <argument>arg2</argument>
            <argument>arg3</argument>
        </arguments>
    </configuration>
  </plugin>
于 2020-07-07T17:46:11.943 に答える