首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优雅地停止maven-antrun-plugin启动的java进程。

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

Stack Overflow用户
提问于 2016-02-17 10:03:57
回答 2查看 4.8K关注 0票数 3

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

run a java application and a web application in a single maven build within a reactor project

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

代码语言:javascript
复制
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
  <phase> verify </phase>
  <configuration>
    <target>
      <property name="runtime_classpath" refid="maven.runtime.classpath" />
      <exec executable="java" spawn="true">
        <arg value="-classpath"/>
        <arg value="${runtime_classpath}"/>
        <arg value="somepackage.AppServer"/>
      </exec>  
    </target>
  </configuration>
  <goals>
    <goal>run</goal>
  </goals>
</execution>
</executions>
</plugin>

上面的配置作为后台进程平稳地启动了我的appserver。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 13:19:35

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

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

然后,当我们检索到进程ID时,我们可以在Windows、kill或Unix系统上使用taskkill杀死它。

这将是maven-antrun-plugin的示例配置。它声明jps可执行文件,并使用属性在属性process.pid中重定向其调用结果。结果使用进行过滤,以便只保留与可执行AppServer对应的行。jps输出以[PID] [NAME]形式出现,因此名称将与一起删除;这样,我们只保留PID。最后,有两种exec配置取决于操作系统。

代码语言:javascript
复制
<configuration>
    <target>
        <property name="runtime_classpath" refid="maven.runtime.classpath" />
        <exec executable="java" spawn="true">
            <arg value="-classpath" />
            <arg value="${runtime_classpath}" />
            <arg value="somepackage.AppServer" />
        </exec>
        <exec executable="${JAVA_HOME}/bin/jps">
            <arg value="-l" />
            <redirector outputproperty="process.pid">
                <outputfilterchain>
                    <linecontains>
                        <contains value="somepackage.AppServer" />
                    </linecontains>
                    <replacestring from=" somepackage.AppServer" />
                </outputfilterchain>
            </redirector>
        </exec>
        <exec executable="taskkill" osfamily="winnt">
            <arg value="/PID" />
            <arg value="${process.pid}" />
        </exec>
        <exec executable="kill" osfamily="unix">
            <arg value="-15" />
            <arg value="${process.pid}" />
        </exec>
    </target>
</configuration>

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

票数 4
EN

Stack Overflow用户

发布于 2018-04-26 07:26:32

在尝试了各种选择之后,我发现这个过程--exec plugin是最好的。我意识到OP是专门询问maven-antrun-plugin的,但这是因为收到了一个通用问题的答案。

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

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

代码语言:javascript
复制
<plugin>
    <groupId>com.bazaarvoice.maven.plugins</groupId>
    <artifactId>process-exec-maven-plugin</artifactId>
    <version>${process-exec-maven-plugin.version}</version>
    <executions>
        <!-- Start process -->
        <execution>
            <id>node-server</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>start</goal>
            </goals>
            <configuration>
                <name>node-server</name>
                <workingDir>../../test-server-dir</workingDir>
                <waitForInterrupt>false</waitForInterrupt>
                <healthcheckUrl>http://localhost:3000/</healthcheckUrl>
                <arguments>
                    <argument>node</argument>
                    <argument>./app.js</argument>
                </arguments>
            </configuration>
        </execution>
        <!--Stop all processes in reverse order-->
        <execution>
            <id>stop-all</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>stop-all</goal>
            </goals>
        </execution>
    </executions>
</plugin>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35453479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档