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>

该应用程序可能会运行几分钟,具体取决于 Internet 连接。如果我只是终止:

mvn clean install

在启动的应用程序完成之前,它仍然在后台运行。如果 maven 构建被中断,是否可以终止 java 应用程序?

4

1 回答 1

1

困难在于 JVM 是在一个单独的进程中启动的,并且您不能再使用直接在 JVM 内的 Java 代码与它进行通信。您需要某种进程间通信。有两种方法可以做到这一点:1)让您的应用程序在端口上侦听信号,并让它自行终止,或 2)在某处记录进程的 pid,然后发出操作系统 kill 命令。两个都有点丑

最好的方法取决于应用程序是什么。我们在启动 Jetty 进行调试时使用选项 1。一些应用服务器会自动监听终止信号。

于 2012-12-28T20:21:31.450 回答