如何在maven jetty插件中指定JDK? 像这样:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty-maven-plugin.version}</version>
<configuration>
<scanIntervalSeconds>2</scanIntervalSeconds>
<webApp>
<contextPath>/${project.build.finalName}</contextPath>
<jettyEnvXml>${project.basedir}/src/over/here/jetty-env.xml</jettyEnvXml>
</webApp>
<httpConnector>
<port>8080</port>
</httpConnector>
<!--<executable>${env.JAVA_IBM_HOME}/bin/javac</executable>-->
</configuration>
</plugin>
请注意:excutable
标记不正确,我只是以它为例。
答案 0 :(得分:1)
澄清一下:您实际上想要指定可执行文件,因此可能是JRE(Java运行时环境)而不是JDK(Java Development Kit)。虽然JDK也可以作为JRE使用,但我认为这是一个必要的澄清。
提出你的问题,没有想到指定用于执行某个Maven插件的不同JDK / JRE:插件作为mvn
命令的一部分执行,而org.codehaus.plexus.classworlds.launcher.Launcher#main
命令又使用默认情况下系统JDK / JRE(在路径中设置)它实际上是一个调用普通Java主的脚本,是的,Maven用Java编写并且它的执行从Java开始主要,以下一点要明确:
JAVA_HOME
如果您想更改用于启动此主程序的JRE,则需要预先更改set JAVA_HOME=path_to_your_different_jdk
mvn jetty:run
变量,此old SO post也说明了这一点。
所以你需要以下内容:
jvm
在您的IDE中,根据您在答案中发布的屏幕截图,您实际上也是这样做的:设置必须使用的JVM。
对于大多数插件都是如此,除非预见到特定的分叉机制。例如:
Maven Surefire Plugin通过reuseForks
选项和jvm
选项提供了fork机制,这也解释了:
指定用于分叉选项的
fork
(或java可执行文件的路径)的选项。对于默认值,jvm将是与用于运行Maven的VM相同的VM的新实例。
然后将使用指定的JVM(用作JRE的JRE或JDK)来执行测试(基本上与您正在寻找的有关Jetty Maven插件的场景相同。
Maven Compiler Plugin还提供fork
选项,然后可以使用executable
选项,您可以有效地指向不同的JDK(在本例中不是JRE)编译你的代码。
设置在
true
为UPDATE user_table SET email=$newemail WHERE userID = $userID
时使用的编译器的可执行文件。
Jetty Maven Plugin作为Maven命令的一部分执行(同样,使用由JAVA_HOME变量指定的JRE或系统的默认值的Java main),也在其官方文档中指定:
正在运行的Jetty及其部署的webapp的类路径由Maven管理 ...
例如,您可能需要在Jetty的分叉实例中运行Web应用程序,而不是在运行Maven的进程中运行;
确实提供了run-forked
目标
此目标允许您在新JVM中启动Web应用程序,可选择将参数传递给新JVM。此目标支持与jetty相同的配置参数:运行目标以及一些附加功能,以帮助配置分叉进程。
然而,此选项主要用于将different arguments传递给Jetty而不是其他可执行文件(例如,如果您已经为Maven设置了相同的参数,并且您希望它与Jetty运行具有不同的值) 。所以,再次,该选项不存在(指定用于此分叉执行的可执行文件/ jvm)。很遗憾,因为他们几乎完成了这个目标。
答案 1 :(得分:0)