3

exec-maven-plugin を使用して Java アプリケーションを実行します。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>upload-res</id>
            <phase>package</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>java</executable>
                <arguments>
                                        <argument>${jvmEncoding}</argument>
                                        <argument>${jvmMaxPermSize}</argument>
                    <argument>-classpath</argument>
                    <classpath />
                    <argument>${myClass}</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

インターネット接続によっては、アプリケーションが数分間実行される可能性があります。私が単に終了した場合:

mvn clean install

起動したアプリが終了する前に、バックグラウンドで実行されます。Maven ビルドが中断された場合、Java アプリケーションを終了することは可能ですか?

4

1 に答える 1

1

問題は、JVMが別のプロセスで起動され、JVM内の直接のJavaコードを使用してJVMと通信できなくなることです。ある種のプロセス間通信が必要です。これを行うには2つの方法があります:1)アプリにシグナルをポートでリッスンさせ、それ自体を終了させるか、2)プロセスのpidをどこかに記録してから、オペレーティングシステムのkillコマンドを発行します。どちらもちょっと醜いです。

最善のアプローチは、アプリが何であるかによって異なります。デバッグのためにJettyを起動するときは、オプション1を使用します。一部のアプリサーバーは、終了信号を自動的にリッスンします。

于 2012-12-28T20:21:31.450 に答える