是否可以使用run-forked从不同的JVM运行Jetty?

时间:2015-04-20 12:08:10

标签: java maven jetty

Maven指向Java 6,我想使用run-forked目标从jetty-maven-plugin调用Java 7 JVM时从Java 7 JVM运行Jetty。我看到了设置jvmArgs的选项,但我没有看到任何允许我选择不同JVM的内容。

我想我可以使用maven-exec并下载到shell脚本(调用我喜欢的任何java二进制文件),但如果可能的话,我宁愿住在maven-land。

仅供参考,我使用的是Maven 3和Jetty 9。

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。 JettyRunForkedMojo使用标准JDK ProcessBuilder.start()来启动分叉JVM。

source所示,Mojo使用getJavaBin() method来查找java可执行文件的路径。 系统变量的价值" java.home"对此进行了分析。

所以,使用jetty-maven-plugin的配置:

...
<execution>
    <id>start-jetty</id>
    <phase>pre-integration-test</phase>
    <goals>
        <goal>run-forked</goal>
    </goals>
    <configuration>
        ...
        <systemProperties>
            <force>true</force> <!-- !!! important -->
            <systemProperty>
                <name>java.home</name>
                <value>/usr/lib/jvm/j2sdk1.6-oracle/</value>
            </systemProperty>
        </systemProperties>                   
    </configuration>
</execution>

可以启动指定版本的分叉JVM。

在我的示例中,我有默认的java home set 1.7,但是强制forked JVM使用1.6 JDK(也已安装)。

答案 1 :(得分:0)

Maven通常不支持其任何插件中的备用JVM行为。 您可以选择在Java 7中运行,并且所有编译/测试都使用Java 6的-source-target完成,将jetty-maven-plugin保留在与JVM相同的JVM级别你执行了构建为。

Jetty自己的构建就是这样。

我们使用Java 7的-source-target构建Java 8。

您可能还需要查看enforcer插件并为构建设置最低JVM级别的实施。