我有一个基于 Gradle 的项目,有两个模块 mod1
和 mod2
.两者都是 Spring Boot 项目。 mod1
有 mod2
作为依赖:
dependencies {
compile project(':mod2')
//more deps
}
两个
mod1
和 mod2
类基础包是com.project
.在 mod2
,我在 com.project.controllers
下有一些 Spring MVC Controller , 所以当我开始 mod1
, mod2
Controller 在 Spring 上下文中注册。我想避免这种情况。
我尝试使用
exclude
将它们排除在外。 @SpringBootApplication
的参数,但它不起作用(因为它们在另一个模块/依赖项中,而不是在项目本身中,我猜)。是否可以排除
mod2
的com.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 专家,因此请参阅文档:
关于spring-boot - 如何排除从项目依赖项中扫描的 Spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52837026/