spring - 使用 Java 10 的 Gradle(即使未导出包,Spring 也能够扫描模块类)

标签 spring gradle java-9 java-platform-module-system

所以我在玩 Spring 和 Java 10 以及 Gradle。

在我的应用程序中,我创建了 2 个模块

  • 用户界面
  • 申请

  • 应用程序模块的 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。

    在我添加的主要类(class)中
    @ComponentScan("com.factory_manager")
    

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

    据我了解,应用程序模块应该无法读取 ui 模块的类,因为我没有将任何包导出到外部。

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

    是的,我无法在我的应用程序模块中访问 UI 模块的类,但 spring 以某种方式能够......

    最佳答案

    不是很具体,但可能的原因可能是您的依赖代码 -

    dependencies {
        compile project (':ui')
    } 
    

    由于 ui模块类出现在类路径而不是模块路径上,并且位于 the unnamed module 下.

    为了进一步关联,未命名的模块导出了它的所有包,因此您可以在不导出它们的情况下访问这些类。

    在我看来,您可以确认这一点的一种方法是,通过尝试类似 -
    <yourClassFromUIModule>.class.getModule().isNamed(); //should return false
    

    关于spring - 使用 Java 10 的 Gradle(即使未导出包,Spring 也能够扫描模块类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973577/

    相关文章:

    android - 使用命令行时 Gradle 构建失败

    java - G1 垃圾收集器是否默认启用了字符串去重功能?

    java - 使用 JShell 进行调试

    java - Spring Boot + SPring REST + Swagger + JPA + 内存中 H2 DB

    java - 重新打包的 jar 的依赖项不起作用

    java - 如何使用gradle API检查工件的存在?

    java - 将包私有(private)类导入 JShell

    java - 无法使用maven构建项目

    hibernate - Spring 和 Hibernate 配置

    java - org.hibernate.MappingException : Could not determine type for: at table: for columns: [org. hibernate.mapping.Column(植物)