所以我和Gradle一起玩Spring和Java 10。
在我的应用程序中,我创建了两个模块
应用程序模块的gradle文件如下所示
dependencies {
compile project (':ui')
}模块信息文件如下所示
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}"
}
}模块-info看起来像这样
module ui {
requires vaadin.server;
requires vaadin.spring;
}所以我的UI代码住在ui模块中。如您所见,我不从ui模块导出任何包,应用程序的模块-info也不需要ui。
在我添加的主要课程中
@ComponentScan("com.factory_manager")神奇的是,它能够扫描UI模块和vaadin UI类,并且我能够通过它们各自的端点访问它们。
据我所知,应用程序模块不应该能够读取ui模块的类,因为我不会导出任何外部包。
有人知道spring是如何神奇地扫描ui模块并找到ui类的吗?
是的,我无法访问应用程序模块中的UI模块类,但是spring可以.
发布于 2018-08-22 19:15:58
不是很具体的等级,但可能的原因是你的依赖代码-
dependencies {
compile project (':ui')
} 因此,ui模块类出现在类路径上,而不是模块路径上,并且在未命名模块下面。
为了进一步关联,未命名的模块导出其所有包,因此您可以访问这些类而不导出它们。
最重要的是,有一种方法你可以证实这一点,那就是,试一试-
<yourClassFromUIModule>.class.getModule().isNamed(); //should return falsehttps://stackoverflow.com/questions/51973577
复制相似问题