3

从命令提示符运行时,我有一个运行良好的应用程序:

java -jar --illegal-access=permit target/Something.jar

但是,这样配置我的 spring boot maven 插件pom.xml会给我同样的错误,就像我在没有该illegal-access=permit部分的情况下运行我的 cmd 一样,告诉我它被忽略了:

<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>

我究竟做错了什么?illegal-access=permit这个应用程序在 java 14 中运行良好,我正在升级到 java 16。除了由于缺少JVM 参数而导致 intelliJ 无法在调试模式下启动它之外,一切仍然运行良好。

4

2 回答 2

1

如果您尝试在 IntelliJ 中运行应用程序,则无需向 Maven 传递任何内容。在 IntelliJ 中,打开应用程序的运行配置,然后在 Environment->VM 选项下添加 --illegal-access=permit。请参见附图,主类将是您的@SpringBootApplication类的完全限定位置,例如 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...,请注意传递给您的应用程序的参数。

于 2021-08-02T21:23:52.917 回答
0

您可能想尝试将其放入属性中。试试这个:

<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。

于 2021-08-09T09:26:45.790 回答