编程语言
首页 > 编程语言> > Gradle with Java 10(Spring即使在未导出包的情况下也可以扫描模块类)

Gradle with Java 10(Spring即使在未导出包的情况下也可以扫描模块类)

作者:互联网

所以我和Gradle一起玩SpringJava 10.

在我的应用程序中,我创建了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