如何将 --illegal-access JVM 参数传递给 spring boot maven 插件
How to pass --illegal-access JVM argument to spring boot maven plugin
我有一个应用程序在 运行 从命令提示符执行此操作时运行良好:
java -jar --illegal-access=permit target/Something.jar
然而,在我的 pom.xml
中配置我的 spring boot maven 插件给我同样的错误,就好像我 运行 我的 cmd 没有 illegal-access=permit
部分一样,告诉我它被忽略了:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.something.PreMain</mainClass>
<jvmArguments>
--illegal-access=permit
</jvmArguments>
</configuration>
</plugin>
我做错了什么?这个应用程序在 java 14 中完美运行,我正在升级到 java 16。一切仍然完美,除了 intelliJ 由于缺少 [=14 而无法在调试模式下启动它=] JVM 参数。
如果您尝试 运行 IntelliJ 中的应用程序,则无需将任何内容传递给 Maven。在 IntelliJ 中,打开应用程序的 运行 配置,然后在环境->VM 选项下添加 --illegal-access=permit。请参阅所附图片,Main class 将是您 @SpringBootApplication
class 的完全限定位置,例如com.something.MySpringBootApplication
当您在 IntelliJ 中以调试模式启动您的应用时,您会看到类似
的内容
/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:52737,suspend=y,server=n --illegal-access=permit -XX:TieredStopAtLevel=1...
,注意传递给您应用的参数。
您可能想尝试将其放入属性中。试试这个:
<properties>
<jvm.options>--illegal-access=permit</jvm.options>
</properties>
然后在插件中使用如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.something.PreMain</mainClass>
<compilerArgs>
<arg>${jvm.options}</arg>
</compilerArgs>
</configuration>
注意:如果您正在访问非法访问参数以确保万无一失,则需要使用 argline 而不是 args。
我有一个应用程序在 运行 从命令提示符执行此操作时运行良好:
java -jar --illegal-access=permit target/Something.jar
然而,在我的 pom.xml
中配置我的 spring boot maven 插件给我同样的错误,就好像我 运行 我的 cmd 没有 illegal-access=permit
部分一样,告诉我它被忽略了:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.something.PreMain</mainClass>
<jvmArguments>
--illegal-access=permit
</jvmArguments>
</configuration>
</plugin>
我做错了什么?这个应用程序在 java 14 中完美运行,我正在升级到 java 16。一切仍然完美,除了 intelliJ 由于缺少 [=14 而无法在调试模式下启动它=] JVM 参数。
如果您尝试 运行 IntelliJ 中的应用程序,则无需将任何内容传递给 Maven。在 IntelliJ 中,打开应用程序的 运行 配置,然后在环境->VM 选项下添加 --illegal-access=permit。请参阅所附图片,Main class 将是您 @SpringBootApplication
class 的完全限定位置,例如com.something.MySpringBootApplication
当您在 IntelliJ 中以调试模式启动您的应用时,您会看到类似
的内容/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:52737,suspend=y,server=n --illegal-access=permit -XX:TieredStopAtLevel=1...
,注意传递给您应用的参数。
您可能想尝试将其放入属性中。试试这个:
<properties>
<jvm.options>--illegal-access=permit</jvm.options>
</properties>
然后在插件中使用如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.something.PreMain</mainClass>
<compilerArgs>
<arg>${jvm.options}</arg>
</compilerArgs>
</configuration>
注意:如果您正在访问非法访问参数以确保万无一失,则需要使用 argline 而不是 args。