spring-boot - 如何排除从项目依赖项中扫描的 Spring bean?

标签 spring-boot gradle build.gradle dependency-management

我有一个基于 Gradle 的项目,有两个模块 mod1mod2 .两者都是 Spring Boot 项目。 mod1mod2作为依赖:

dependencies {
    compile project(':mod2')
    //more deps
}

两个mod1mod2类基础包是com.project .在 mod2 ,我在 com.project.controllers 下有一些 Spring MVC Controller , 所以当我开始 mod1 , mod2 Controller 在 Spring 上下文中注册。

我想避免这种情况。

我尝试使用 exclude 将它们排除在外。 @SpringBootApplication的参数,但它不起作用(因为它们在另一个模块/依赖项中,而不是在项目本身中,我猜)。

是否可以排除mod2com.project.controllers通过 Gradle 配置以某种方式打包?

最佳答案

据我所知不可能。 Gradle 看到 mod2作为一个依赖,它会根据你在 mod2 中声明它们的方式引入所有内容,包括它的任何依赖。的build.gradle文件。

由于它们是同一个包的一部分,它们将被 Spring 自动拾取,据我所知,从自动扫描中排除单个组件的唯一方法是通过 excludeFilters 明确指定要排除的组件。 :

excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {MyController.class, MyOtherController})

否则,您需要将这些特定 Controller 声明为单独的依赖项,当您拉入 mod2 时可以将其排除在外。 :
build.gradle对于 m2
dependencies {
    compile project(':mod2') {
        exclude 'controllers'
    }
}
build.gradle对于 m1
dependencies {
    compile project(':controllers')
}

类似的东西。我不是 Gradle 专家,因此请参阅文档:
  • https://docs.gradle.org/current/userguide/managing_transitive_dependencies.html#sec:excluding_transitive_module_dependencies
  • https://docs.gradle.org/current/userguide/introduction_dependency_management.html
  • 关于spring-boot - 如何排除从项目依赖项中扫描的 Spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52837026/

    相关文章:

    java - 如何在 JUnit 测试中覆盖私有(private)方法

    java - Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

    android - 命令行中的 Gradlew 不会创建签名的 APK

    java - @Repository dao 中的 Spring @PostConstruct 和扩展 dao 的 @Service

    java - 使用 "code"配置自动连接服务注入(inject)

    android - Gradle 3.0 拆分不起作用

    java - 如何在没有安装 maven 和 java 的情况下从 gradle 执行 maven 插件

    java - 无法在eclipse中构建gradle项目?

    Android Gradle 失败 多个 dex 文件定义 okhttp

    java - 如何用两个参数(第一个是List<String>,第二个是Long)编写Mybatis XML Mapper?