У меня есть проект Maven с несколькими API, и грубая плоская структура:
application
- common
- api-01
- api-02
- ...
- api-20
- global
Каждый из модулей имеет:
<parent>
<groupId>com.application</groupId>
<artifactId>application</artifactId>
<version>placeholder</version>
</parent>
- Некоторые из API (
api-01
, api-02
... api-20
) зависят от common
. Каждый API соответствует соглашению об именах пакетов, например,com.application.api01
У global
есть зависимости от всех зависимостей API (api-01
, api-02
... api-20
).
В global
есть тестовый класс, где я использую ClassPathScanningCandidateComponentProvider , чтобы получить все классы во всех API:
final ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
provider.addIncludeFilter(new RegexPatternTypeFilter(Pattern.compile(".*")));
final Set<BeanDefinition> classes = provider.findCandidateComponents("com.application");
Автономный тест
Когда я запускаю автономный тест только без Maven, all классы распознаются правильно, и я вижу их.Я думаю, это происходит потому, что существует папка target
со встроенным файлом jar
.
Maven test
Когда я собираю проект и запускаю весь тест с mvn clean install
, я вижу нет класс включен в любой API (api-01
, api-02
... api-20
).Все же все классы от common
признаны.Папка target
создается при сборке модуля, и поскольку global
создается как последний, я ожидаю, что все классы (из файлов jar
) должны быть распознаны.
Вопрос
Как обеспечить, чтобы Maven мог видеть все классы API в global
?Я пока не использую Java 9, но Java 8.
Я могу предоставить дополнительную информацию по запросу.