Sping Boot 2.6.3和Java模块

e1xvtsh3  于 6个月前  发布在  Java
关注(0)|答案(2)|浏览(97)

我正在尝试使用java模块(java 17)和gradle(7.4)构建一个spring Boot (2.6.3)应用程序。
现在我的文件夹结构看起来像这样:

|- build.gradle.kts
    |- settings.gradle.kts
    |- src
       |- main
           |- java
               |- com.my.package
                   |- Application.java
               |- module-info.java

字符串
我的模块:

module com.my.package {
        requires spring.boot;
        requires spring.boot.autoconfigure;
        requires spring.boot.actuator.autoconfigure;
        
        opens com.my.package;
    }


应用类:

@SpringBootApplication
    public class Application {

        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }


我已经发现,我必须使用opens与我的包,而不仅仅是使用exports。如果我在哪里使用exports,我会得到这个错误:
java.lang. IllegalPackage异常-->模块com.my.package无法打开未命名模块@1a482e36的com.my.package
现在,当我运行opens时,我会在这里得到这个错误:
java.lang. IllegalConfiguration Error-->superinterface check failed:class com.my.package.Application$$EnhancerBySpringCGLIB$$917dba7a(在模块com.my.package中)无法访问class org.springframework.context.annotation. EnhancationClassEnhancer $EnhancedConfiguration(在未命名模块@0x1623b78d中),因为模块com.my.package未读取未命名模块@0x1623b78d
我读过一些关于使用-classpath JVM参数的文章。但是我不太确定应该把哪个路径放在那里。坦率地说,我试图找到一个解决方案,它不需要传递任何参数。这样的体验就像没有(java)模块的spring一样。
如果有人能帮助我理解我在这里做错了什么,那就太好了。很明显,我是java模块的新手,我正试图把我的头绕过去。
提前感谢!
干杯,丹尼尔

ar5n3qh5

ar5n3qh51#

CGlib相关问题所需的模块spring.aop(今天早上对我来说很有用)。
我遵循原始帖子(OP)的自我回答问题,因为添加--add-reads首先会破坏使用Java平台模块系统(JPMS)的整个目的。

b1zrtrql

b1zrtrql2#

正如dan1st指出的那样,--add-reads com.my.package=ALL-UNNAMED确实做到了。在问题dan1st中可以找到更详细的解释,因为sharing我甚至没有想到它可能与IDE相关。(我使用的是IntelliJ)

相关问题