Gradle with Java 10(Spring即使在未导出包的情况下也可以扫描模块类)
作者:互联网
在我的应用程序中,我创建了2个模块
> UI
>申请
应用程序模块的gradle文件如下所示
dependencies {
compile project (':ui')
}
而module-info文件看起来像这样
module application {
requires spring.context;
requires spring.boot.autoconfigure;
requires spring.boot;
}
在我的UI模块中,build.gradle看起来像这样
dependencies {
compile('com.vaadin:vaadin-spring-boot-starter')
}
dependencyManagement {
imports {
mavenBom "com.vaadin:vaadin-bom:${vaadinVersion}"
}
}
而module-info看起来像这样
module ui {
requires vaadin.server;
requires vaadin.spring;
}
所以我的UI代码存在于ui模块中.如您所见,我不是从ui模块外部导出任何包,应用程序的module-info也不需要ui.
在主要课程中我添加了
@ComponentScan("com.factory_manager")
神奇地,它能够扫描UI模块和vaadin UI类,并且我能够通过各自的端点访问它们.
根据我的理解,应用程序模块不应该能够读取ui模块的类,因为我没有在外面导出任何包.
有没有人知道弹簧是如何神奇地扫描ui模块并找到ui类的?
是的,我无法访问我的应用程序模块中的UI模块的类,但春天不知何故能够..
解决方法:
不是特定的gradle,但可能的原因可能是你的依赖代码 –
dependencies {
compile project (':ui')
}
由于ui模块类存在于类路径而不是模块路径上,因此低于the unnamed module.
为了进一步关联,未命名的模块导出其所有包,因此您可以在不导出它们的情况下访问这些类.
最重要的是,您可以通过尝试以下方式来确认这一点:
<yourClassFromUIModule>.class.getModule().isNamed(); //should return false
标签:spring,gradle,java-9,jigsaw 来源: https://codeday.me/bug/20190701/1346500.html