如何停止 Maven 执行

Posted

技术标签:

【中文标题】如何停止 Maven 执行【英文标题】:How to stop Maven Execution 【发布时间】:2018-02-09 00:50:54 【问题描述】:

我有一个模拟服务器,我需要在运行自动化测试之前在 Jenkins 中启动它,然后在我的测试运行后停止模拟服务器。

这个模拟服务器是一个 maven 项目,使用 exec-maven-plugin。我可以通过运行命令mvn exec:java 来启动这个服务器。但是我无法通过 Jenkins 停止这个 Maven 项目。我已经阅读过它,大多数答案都告诉我要找到这个 Maven 项目的进程 ID,然后杀死它。有没有更干净、更简单的方法来停止这个项目?

【问题讨论】:

【参考方案1】:

如果你运行的是 linux:

ps aux |grep <project-name> 然后kill -9 <process id>

【讨论】:

【参考方案2】:

这个问题的关键确实是你不知道processId。考虑使用exec:exec 而不是async。您会看到 asyncDestroyOnShutdown 默认设置为 true,这意味着它会在 Maven 关闭后关闭。

【讨论】:

【参考方案3】:

您需要使用 goals 启动和停止服务器,这是 maven 生命周期的一部分。

取自this answer的例子

<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
       <executions>
          <execution>
            <id>tomcat-run</id>
            <goals>
              <goal>run-war-only</goal>
            </goals>
            <phase>pre-integration-test</phase>
                <configuration>

                    <fork>true</fork> 
                </configuration>

           </execution>
           <execution>
            <id>tomcat-shutdown</id>
            <goals>
              <goal>shutdown</goal>
            </goals>
            <phase>post-integration-test</phase>
          </execution>
        </executions>
      </plugin>

【讨论】:

以上是关于如何停止 Maven 执行的主要内容,如果未能解决你的问题,请参考以下文章

Maven:如何停止使用旧版本的依赖?

如何停止 Maven 的验证阶段重建工件?

如何在eclipse中使用maven停止tomcat 7

如何从 Maven 启动和停止 JBoss 服务器,绑定到与 localhost 不同的地址?

如果存储库中有相同快照版本的发布版本,如何停止 Maven 构建?

Maven的验证上启动和每个班级停止春季测试运行