我有一个带有多个API的Maven项目,其大致的扁平结构是:
application
- common
- api-01
- api-02
- ...
- api-20
- global
每个模块都有:
<parent>
<groupId>com.application</groupId>
<artifactId>application</artifactId>
<version>placeholder</version>
</parent>
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的情况下运行独立测试时, 所有 这些类将被正确识别,并且可以看到它们。我猜是因为存在带有内置target
文件的jar
文件夹。
构建项目并使用mvn clean install
运行所有测试时,我看到任何API中都包含 no 类(api-01
,{ {1}} ... api-02
)。但是api-20
中的所有类都可以识别。 common
文件夹是在构建模块时创建的,并且由于target
是最后一个模块,因此,我希望所有类(来自global
文件)都应被识别。
如何确保Maven能够查看jar
中的所有API类?我还没有使用Java 9,但是没有使用Java 8。
我可以根据要求提供更多信息。