使用Exec Maven插件分叉Java,而不使用`exec`目标

时间:2013-06-10 18:41:39

标签: java maven exec-maven-plugin

来自documentation

  1. exec:exec在一个单独的过程中执行程序和Java程序。
  2. exec:java在同一个VM中执行Java程序。
  3. 我想分叉一个java程序。我已经在exec:java中使用了它但是没有分叉。所以明显的举措是将目标改为exec。问题是,exec的语法与java的语法非常不同。它没有像includeProjectDependenciesincludePluginDependencies等标签。是否有一个我可以使用的插件,就像它在分叉的意义上的#1一样,但它有一个方便的语法,如#2? IMO,#2应该只有<fork>true</fork>配置。

2 个答案:

答案 0 :(得分:1)

我认为你可以坚持使用exec:exec,如果你想将项目类路径提供给你使用的Java进程,那就使用这种配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
        <executable>java</executable>
        <longClasspath>true</longClasspath>
        <arguments>
            <argument>-XX:MaxPermSize=128M</argument>
            <argument>-Xmx1024M</argument>
            <argument>-Xdebug</argument>
            <argument>-Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n</argument>
            <argument>-classpath</argument>
            <classpath/>
        </arguments>
    </configuration>
</plugin>

另请参阅plugin Usage page

答案 1 :(得分:1)

也可以使用maven-antrun-plugin从Maven生成Java进程。这个插件exports several classpaths涵盖了编译/运行时/测试范围,以及插件依赖项。

在具有编译和插件依赖性的单独进程中执行类将如下所示:

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <goals>
    <goal>run</goal>
  </goals>
  <configuration>
    <target>
      <java classname="com.example.MainClass" fork="true">
        <classpath>
          <path refid="maven.compile.classpath"/>
          <path refid="maven.plugin.classpath"/>
        </classpath>
      </java>
    </target>
  </configuration>
</plugin>

这是使用mvn antrun:run代替exec:exec执行的。