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

2022-09-04 22:47:03

文档中

  1. exec:exec在单独的进程中执行程序和 Java 程序。
  2. exec:java在同一 VM 中执行 Java 程序。

我想分叉一个java程序。我已经让它工作了,但这不会分叉。因此,显而易见的举动是将目标更改为.问题是,的语法与 的语法有很大不同。它没有像 、 等这样的标签。有没有一个插件,我可以使用它类似于#1,因为它分叉,但有一个方便的语法,如#2?IMO,#2应该只有一个配置。exec:javaexecexecjavaincludeProjectDependenciesincludePluginDependencies<fork>true</fork>


答案 1

也可以使用maven-antrun-plugin从Maven生成Java进程。此插件导出多个类路径,涵盖编译/运行时/测试范围以及插件依赖项。

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

<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:runexec:exec


答案 2

我认为你可以坚持使用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>

另请参阅插件使用页面


推荐