使用 Exec Maven 插件分叉 Java,而不使用 `exec` 目标
Posted
技术标签:
【中文标题】使用 Exec Maven 插件分叉 Java,而不使用 `exec` 目标【英文标题】:Forking Java using the Exec Maven Plugin, without using the `exec` goal 【发布时间】:2013-06-06 12:07:48 【问题描述】:来自documentation:
exec:exec
在单独的进程中执行程序和 Java 程序。
exec:java
在同一个 VM 中执行 Java 程序。
我想 fork 一个 java 程序。我已经让它在exec:java
中工作,但这并没有分叉。所以显而易见的举动是将目标更改为exec
。问题是,exec
的语法与java
的语法大不相同。它没有includeProjectDependencies
、includePluginDependencies
等标签。我可以使用一个类似于#1 的插件,在它分叉的意义上,但具有类似于#2 的方便语法? IMO,#2 应该只有一个 <fork>true</fork>
配置。
【问题讨论】:
您可以随时修改 Exec Maven 插件以分叉 Java 进程,但保留 includeProjectDependencies 和 includePluginDependencies svn.codehaus.org/mojo/tags/exec-maven-plugin-1.2.1/src/main/… @DeanToader 该链接现已失效。 您找到解决方案了吗? github.com/mojohaus/exec-maven-plugin/issues/85 【参考方案1】:还可以使用maven-antrun-plugin 从 Maven 生成 Java 进程。这个插件exports several classpaths覆盖了compile/runtime/test范围,以及插件依赖。
因此,在具有编译和插件依赖项的单独进程中执行一个类将如下所示:
<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
执行的。
【讨论】:
【参考方案2】:如果您想将项目类路径提供给您使用的 Java 进程,我认为您可以坚持使用 exec:exec,使用这种配置:
<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
【讨论】:
你在哪里配置includeProjectDependencies
和includePluginDependencies
这里?
项目依赖是通过 以上是关于使用 Exec Maven 插件分叉 Java,而不使用 `exec` 目标的主要内容,如果未能解决你的问题,请参考以下文章
Maven Failsafe 插件 - SurefireBooterForkException: 分叉进程中出现错误 (TypeNotPresentExceptionProxy)