9

我需要从 Maven 运行服务器(在 Java 类中实现),但是如果我使用 exec:java 目标,它将阻止 maven,并且不会传递到连接到服务器的下一个阶段。

有什么方法可以异步运行 exec:java 任务,而不会中断 maven 执行?

谢谢!

4

3 回答 3

6

您可以使用 exec-maven-plugin 运行 shell 脚本,该脚本将启动您的进程并从中分离(让进程在后台运行)。像这样的东西:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <executions> 
      <execution> 
        <id>start-server</id> 
        <phase>pre-integration-test</phase> 
        <goals> 
          <goal>exec</goal> 
        </goals> 
        <configuration> 
          <executable>src/test/scripts/run.sh</executable> 
          <arguments> 
            <argument>{server.home}/bin/server</argument> 
          </arguments> 
        </configuration> 
      </execution> 
    </executions> 
  </plugin> 

run.sh 可能是这样的(对于 U*nix 平台):

#! /bin/sh
$* > /dev/null 2>&1 &
exit 0

这应该够了吧。

于 2012-06-05T14:25:51.357 回答
0

It looks like you can do this with the antrun plugin:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.3</version>
            <configuration>
                <tasks>
                    <java fork="true" spawn="true" classpathref="maven.runtime.classpath" className="fully.qualified.package.App"/>
                </tasks>
            </configuration>
        </plugin>
于 2012-06-05T18:31:46.167 回答
0

如果您正在运行此服务器类以在 Maven POM 中运行进一步的集成测试步骤,那么实际上最好考虑使用持续集成工具,例如Jenkins,它有很多插件可以让您运行自己的类、启动和停止服务器、部署应用程序和许多其他可能性,而且它是免费的。

于 2016-08-22T11:58:14.943 回答