优雅地停止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上的taskkill
或kill
或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