优雅地停止maven-antrun-plugin启动的java进程

这个问题是昨天回答这个问题的结果

在reactor项目中的单个maven构建中运行Java应用程序和Web应用程序

因此,正如上面的问题所解答的,我现在有了一个maven-antrun-plugin,它使用这样的配置分叉子进程并运行我的java appserver –

 maven-antrun-plugin 1.8    verify             run     

上面的配置顺利启动我的appserver作为后台进程。

现在我的问题是,如果有一个简单的方法我可以找到这个过程并在我通过构建开始之后需要时停止它。

您可以使用JDK中捆绑的jps实用程序来获取正在运行的Java可执行文件的进程ID:

jps工具列出了目标系统上的已检测HotSpot Java虚拟机(JVM)。 该工具仅限于报告具有访问权限的JVM的信息。

然后,当我们检索到进程ID时,我们可以使用Windows上的taskkillkill或Unix系统将其taskkill

这将是maven-antrun-plugin的示例配置。 它声明了jps可执行文件,并使用属性在属性process.pid 其调用结果。 结果使用过滤,以便仅保留与可执行AppServer对应的行。 jps输出的格式为[PID] [NAME]因此使用删除名称; 这样,我们只保留PID。 最后,根据操作系统有两个exec配置。

                              

既然你提到了“优雅”,我在Unix上使用了-15选项,并且没有包含Windows的/F选项。 如果要强制退出,可以在Unix系统上使用kill -9并在Windows上添加/F选项。

尝试了各种选项之后,我发现process-exec-maven-plugin是最好的。 我意识到OP专门询问maven-antrun-plugin,但这是因为收到了一般性问题的答案。

https://github.com/bazaarvoice/maven-process-plugin

使用它来启动nodeJs服务器的示例,该服务器用作集成测试的一部分:

  com.bazaarvoice.maven.plugins process-exec-maven-plugin ${process-exec-maven-plugin.version}    node-server pre-integration-test  start   node-server ../../test-server-dir false http://localhost:3000/  node ./app.js      stop-all post-integration-test  stop-all