Как я могу исключить Spring bean-компоненты, отсканированные из зависимости проекта? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть проект на базе Gradle с двумя модулями mod1 и mod2.Оба проекта Spring Boot.mod1 имеет mod2 в качестве зависимости:

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

Базовый пакет классов mod1 и mod2 равен com.projectmod2 у меня есть некоторые контроллеры Spring MVC под com.project.controllers, поэтому, когда я запускаю mod1, mod2 контроллеры регистрируются в контексте Spring.

Я хочу этого избежать.

Я пытался исключить их, используя exclude параметр @SpringBootApplication, но он не работает (потому что они находятся внутри другого модуля / зависимости, а не в самом проекте, я думаю).

Это так?Можно ли каким-то образом исключить пакет mod2 com.project.controllers при конфигурации Gradle?

1 Ответ

0 голосов
/ 16 октября 2018

Насколько я знаю, это невозможно.Gradle видит mod2 как зависимость, поэтому он извлекает все , включая любые его зависимости, в зависимости от того, как вы объявили их в mod2 'build.gradle файле.

Так как они'Будучи частью одного и того же пакета, они будут автоматически выбраны Spring, насколько мне известно, единственный способ исключить отдельные компоненты из автоматического сканирования - это явно указать те, которые вы хотите исключить с помощью excludeFilters:

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

В противном случае вам нужно будет объявить эти конкретные контроллеры как отдельную зависимость, которая может быть исключена при извлечении mod2:

build.gradle для m2

dependencies {
    compile project(':mod2') {
        exclude 'controllers'
    }
}

build.gradle для m1

dependencies {
    compile project(':controllers')
}

Что-то в этом роде.Я не эксперт Gradle, поэтому обратитесь к документации:

...