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

时间:2018-10-16 13:48:28

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

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

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

mod1mod2类的基本包均为com.project。在mod2中,我在com.project.controllers下有一些Spring MVC控制器,因此,当我启动mod1时,mod2控制器会在Spring上下文中注册。

我想避免那样。

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

是否可以通过Gradle配置以某种方式排除@SpringBootApplication的{​​{1}}软件包?

1 个答案:

答案 0 :(得分:0)

据我所知不可能。 Gradle将mod2视为依赖项,因此它将提取一切,包括其任何依赖项,具体取决于您如何在mod2的{​​{1}}文件中声明它们。

由于它们是同一软件包的一部分,因此它们将由Spring自动提取,据我所知,实际上,从自动扫描中排除单个组件的唯一方法是显式指定要通过排除的组件excludeFilters

build.gradle

否则,您将需要将那些特定的控制器声明为单独的依赖项,并在引入excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {MyController.class, MyOtherController}) 时将其排除在外:

mod2 for build.gradle

m2

dependencies { compile project(':mod2') { exclude 'controllers' } } for build.gradle

m1

类似的东西。我不是Gradle专家,所以请参考文档: