代码之家  ›  专栏  ›  技术社区  ›  Sneh

Gradle with Java 10(即使包未导出,Spring也能扫描模块类)

  •  4
  • Sneh  · 技术社区  · 7 年前

    所以我和Gradle一起玩Spring和Java10。

    • 用户界面
    • 应用程序

    应用程序模块的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}"
        }
    }
    

    module ui {
        requires vaadin.server;
        requires vaadin.spring;
    }
    

    所以我的UI代码就在UI模块中。如您所见,我没有从ui模块导出任何包,应用程序的模块信息也不需要ui。

    在主类中我添加了

    @ComponentScan("com.factory_manager")
    

    神奇的是,它能够扫描UI模块和vaadinui类,我能够通过它们各自的端点访问它们。

    据我所知,应用程序模块不能读取ui模块的类,因为我没有导出任何外部包。

    有人知道spring如何神奇地扫描ui模块并找到ui类吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Naman    7 年前

    不太明确,但可能的原因是你的依赖代码-

    dependencies {
        compile project (':ui')
    } 
    

    ui 模块类出现在类路径上,而不是模块路径下 the unnamed module .

    为了进一步关联,未命名的模块 出口所有包装 因此,您可以访问这些类而无需导出它们。

    <yourClassFromUIModule>.class.getModule().isNamed(); //should return false