将 Java 参数传递给 Jetty Maven 插件

问题描述 投票:0回答:1

我正在尝试为一个也支持 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 参数,我能够毫无错误地部署项目。它生成了与此类似的命令。

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

这是我正在处理的pom文件:https://github.com/openmrs/openmrs-core/blob/458f9417c1d2ab45c37fbdac8b94ec3a854cb7be/webapp/pom.xml#L100-L129

java maven jetty java-17 maven-jetty-plugin
1个回答
0
投票

Jetty 9.x 现已终止社区支持。

参见:https://github.com/jetty/jetty.project/issues/7958

Jetty 9 不支持在 jetty-maven-plugin 上使用 JPMS。

这是在 Jetty 10 中首次以 fork 模式添加的。

查看插件配置选项

deployMode
(在
FORK
模式下)和
jvmArgs
(仅在fork模式下可用)

https://eclipse.dev/jetty/documentation/jetty-10/programming-guide/index.html#deployment-modes

简而言之,您可以在 jetty-maven-plugin 中使用适当的

<configuration>
部分来指定这些选项,或者使用
<properties>
部分来定义这两种配置的等效属性。 (分别为
jetty.deployMode
jetty.jvmArgs

<properties>
  <jetty.deployMode>FORK</jetty.deployMode>
  <jetty.jvmArgs>--add-opens java.base/java.lang=ALL-UNNAMED</jetty.jvmArgs>
</properties>

<plugin>
  <groupId>org.eclipse.jetty.ee8</groupId>
  <artifactId>jetty-ee8-maven-plugin</artifactId>
  <version>12.0.2</version>
  <executions>
    <execution>
      <id>run-jetty</id>
      <phase>process-test-classes</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <deployMode>${jetty.deployMode}</deployMode>
        <contextXml>${basedir}/src/main/jetty/jetty-context.xml</contextXml>
        <jettyXmls>
          <jettyXml>${basedir}/src/main/jetty/jetty.xml</jettyXml>
        </jettyXmls>
        <stopPort>9898</stopPort>
        <stopKey>DEADBEEF</stopKey>
        <jvmArgs>${jetty.jvmArgs}</jvmArgs>
      </configuration>
    </execution>
  </executions>
</plugin>

<configuration>
<properties>
中定义的原因是,您可以在命令行上使用任何其他 jetty-maven-plugin 目标,而无需定义另一个
<execution>
<configuration>
部分。 (它也有助于 IT 测试)

© www.soinside.com 2019 - 2024. All rights reserved.