如何将 --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。