首页 > 解决方案 > 当你有 jdk 1.8 代码时,你如何执行 maven 的 spring-boot:run?

问题描述

我实际上是在问这个问题,但spring-boot:run目标是:如何通过 --add-opens JDK 模块配置来进行 Maven 测试

对于上下文,我正在尝试执行为 jdk16 中的 jdk1.8 编写的 spring-boot 1.5.1.RELEASE 代码。JDK 9 引入了模块的概念,这是一个向后不兼容的变化,尽管根据我的研究,看起来有一些变通方法。当我运行代码时,我收到此错误:

无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError 可访问:模块 java.base不会“打开 java.lang”到未命名的模块

我不想在这个旧项目中添加模块,而是希望通过对现有项目的最小修改来解决这个问题。在不添加模块的情况下运行我的应用程序需要做什么?我知道可行的一种解决方法是下载 JDK 8 并使用它运行代码,但这似乎不是一个好的解决方案。

标签: javaspringspring-bootmaven

解决方案


我想我找到了答案,但我想知道是否有更好的方法:

<build>
    <finalName>project</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>--add-opens java.base/java.lang=ALL-UNNAMED</jvmArguments>
            </configuration>
        </plugin>
    </plugins>
</build>

推荐阅读