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

Is it possible to run Jetty from a different JVM using run-forked?

Maven 指向 Java 6,当从 jetty-maven-plugin 调用它时,我想从 Java 7 JVM 运行 Jetty,使用 运行-分叉目标。我看到一个用于设置 jvmArgs 的选项,但我没有看到任何允许我选择不同 JVM 的选项。

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

仅供参考,我正在使用 Maven 3 和 Jetty 9。

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

Jetty 自己的构建就是这样做的。

我们构建 Java 8,-source-target 为 Java 7。

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

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

source, Mojo uses 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 设置为 1.7,但强制分叉 JVM 使用 1.6 JDK(也已安装)。