You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在POM.xml中为Jetty Maven插件传递Java参数?

问题

我正在为一个同时支持Java 8、Java 11的项目添加Java 17支持,项目使用Maven Jetty插件部署。执行jetty:run时出现以下错误:

java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.lang.Object.finalize() throws java.lang.Throwable accessible: module java.base does not "opens java.lang" to an unnamed module

手动在IntelliJ IDEA中添加--add-opens java.base/java.lang=ALL-UNNAMED参数后可正常部署,生成的命令类似:

java --add-opens java.base/java.lang=ALL-UNNAMED jetty:run

请问能否通过POM.xml配置该参数,无需手动设置?
相关版本信息:Java 17、Jetty Maven插件9.4.35.v20201120、Maven 3.11.0

解决方案

可以通过配置Maven Jetty插件的jvmArgs参数实现,无需手动添加JVM参数。

在项目POM.xml的Jetty插件配置段中,添加<jvmArgs>节点并填入所需参数即可。修改后的配置示例如下:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.35.v20201120</version>
  <configuration>
    <!-- 保留原有其他配置 -->
    <jvmArgs>--add-opens java.base/java.lang=ALL-UNNAMED</jvmArgs>
    <!-- 保留原有其他配置 -->
  </configuration>
</plugin>

配置完成后,执行mvn jetty:run时,Maven会自动将该JVM参数传递给Jetty运行进程,无需手动设置。

如果要兼顾多Java版本兼容性(项目同时支持Java 8、11、17),可以通过Maven Profile区分配置,避免低版本Java出现无效参数:

<profiles>
  <profile>
    <id>java17+</id>
    <activation>
      <jdk>[17,)</jdk>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <configuration>
            <jvmArgs>--add-opens java.base/java.lang=ALL-UNNAMED</jvmArgs>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

这样只有使用Java 17及以上版本时,才会自动添加该JVM参数,不影响低版本Java的运行。

内容的提问来源于stack exchange,提问作者Wikum Chamith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:37:39