我正在尝试使用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模块的新手,我正试图把我的头绕过去。
提前感谢!
干杯,丹尼尔
2条答案
按热度按时间ar5n3qh51#
CGlib相关问题所需的模块
spring.aop
(今天早上对我来说很有用)。我遵循原始帖子(OP)的自我回答问题,因为添加
--add-reads
首先会破坏使用Java平台模块系统(JPMS)的整个目的。b1zrtrql2#
正如dan1st指出的那样,
--add-reads com.my.package=ALL-UNNAMED
确实做到了。在问题dan1st中可以找到更详细的解释,因为sharing我甚至没有想到它可能与IDE相关。(我使用的是IntelliJ)