如何在 maven jetty 插件中指定 JDK
Posted
技术标签:
【中文标题】如何在 maven jetty 插件中指定 JDK【英文标题】:How to specify JDK in maven jetty plugin 【发布时间】:2016-07-08 20:51:59 【问题描述】:? 像这样:
<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
标签不正确,我只是用它作为例子。
【问题讨论】:
指定 JDK 是什么意思?你通常设置在maven-complier-plugin
@ Shmulik Klein,感谢您的回复。是的,你是对的。我知道 maven-complier-plugin 可以为每个 maven 模块指定 JDK 版本。但我想为 maven-jetty 插件指定 JDK 版本。当 maven-jetty 运行时,maven-complier 插件无法生效。 maven-jetty 似乎与系统(OS)环境 JDK 版本一起运行。这不是我需要的。
@ShmulikKlein 不仅在那里,而且我认为不仅仅是编译,请检查我的答案
【参考方案1】:
澄清一下:您实际上想指定一个可执行文件,因此可能是 JRE(Java 运行时环境)而不是 JDK(Java 开发工具包)。虽然 JDK 确实也可以用作 JRE,但我认为这是需要澄清的。
关于您的问题,没有这样的想法来指定用于执行某个 Maven 插件的不同 JDK/JRE:插件作为 mvn
命令的一部分执行,而该命令又使用系统 JDK 执行/JRE 默认情况下(在路径中设置),它实际上是一个调用普通 Java 主程序的脚本,是的,Maven 它是用 Java 编写的,它的执行从 Java 主程序开始,以下是说清楚:
org.codehaus.plexus.classworlds.launcher.Launcher#main
如果您想更改用于启动此 main 的 JRE,您需要预先更改 JAVA_HOME
变量,正如 old SO post 所解释的那样。
所以你需要以下内容:
set JAVA_HOME=path_to_your_different_jdk
mvn jetty:run
在您的 IDE 中,根据您在答案中发布的屏幕截图,您实际上是在做同样的事情:设置必须使用哪个 JVM。
对于大多数插件来说都是如此,除非预见到特定的分叉机制。例如:
Maven Surefire Plugin 通过reuseForks
选项和jvm
选项提供了分叉机制,这也说明了:
用于指定
jvm
(或java 可执行文件的路径)以与forking 选项一起使用的选项。默认情况下,jvm 将是与用于运行 Maven 的虚拟机相同的虚拟机的新实例。
然后将使用指定的 JVM(JRE 或用作 JRE 的 JDK)来执行测试(基本上与您正在寻找的关于 Jetty Maven 插件的场景相同。
Maven Compiler Plugin 还提供了一个fork
选项,然后可以使用executable
选项,您可以有效地指向不同的JDK(在这种情况下不是JRE)来编译您的代码。
设置当
fork
为true
时使用的编译器的可执行文件。
Jetty Maven Plugin 是作为 Maven 命令的一部分执行的(同样,使用 JAVA_HOME 变量或系统默认值指定的 JRE 的 Java 主程序),在其官方文档中也有指定:
正在运行的 Jetty 及其部署的 webapp 的类路径由 Maven 管理 ... 例如,您可能需要在 Jetty 的分叉实例中运行您的 webapp,而不是在运行 Maven 的进程中;
确实提供了run-forked
目标
此目标允许您在新的 JVM 中启动 webapp,可选择将参数传递给新的 JVM。此目标支持与 jetty:run 目标相同的配置参数,并带有一些附加功能来帮助配置分叉进程。
然而,此选项主要用于将different arguments 传递给 Jetty,而不是不同的可执行文件(例如,如果您已经为 Maven 设置了相同的参数并且您希望它为 Jetty 运行使用不同的值)。因此,再一次,该选项不存在(指定用于此分叉执行的可执行文件/jvm)。很遗憾,因为他们几乎是带着这个目标到达那里的。
【讨论】:
【参考方案2】:我想我自己得到了答案,但是我仍然不知道如何在 maven xml 文件中进行操作,如果您知道,请告诉我。
【讨论】:
以上是关于如何在 maven jetty 插件中指定 JDK的主要内容,如果未能解决你的问题,请参考以下文章
使用maven jetty插件在java 8上运行jetty 9时出现错误扫描文件[重复]
如何在 Android Studio 中指定 JDK 版本?