GH-798 - Guard against multiple non-unique module base packages.
This commit is contained in:
@@ -134,8 +134,14 @@ class AnnotationModulithMetadata implements ModulithMetadata {
|
||||
@Override
|
||||
public List<String> getBasePackages() {
|
||||
|
||||
var result = new ArrayList<>(List.of(basePackage));
|
||||
result.addAll(List.of(annotation.additionalPackages()));
|
||||
var result = new ArrayList<String>();
|
||||
result.add(basePackage);
|
||||
|
||||
for (var candidate : annotation.additionalPackages()) {
|
||||
if (!result.contains(candidate)) {
|
||||
result.add(candidate);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -139,12 +139,14 @@ public class ApplicationModules implements Iterable<ApplicationModule> {
|
||||
var strategy = ApplicationModuleDetectionStrategyLookup.getStrategy();
|
||||
|
||||
this.modules = packages.stream() //
|
||||
.distinct()
|
||||
.map(it -> JavaPackage.of(classes, it))
|
||||
.flatMap(strategy::getModuleBasePackages) //
|
||||
.map(it -> new ApplicationModule(it, useFullyQualifiedModuleNames)) //
|
||||
.collect(toMap(ApplicationModule::getName, Function.identity()));
|
||||
|
||||
this.rootPackages = packages.stream() //
|
||||
.distinct()
|
||||
.map(it -> JavaPackage.of(classes, it).toSingle()) //
|
||||
.toList();
|
||||
|
||||
|
||||
@@ -66,6 +66,14 @@ class ModulithMetadataUnitTest {
|
||||
.withMessageContaining(SpringBootApplication.class.getSimpleName());
|
||||
}
|
||||
|
||||
@Test // GH-798
|
||||
void returnsUniqueBasePackages() {
|
||||
|
||||
var metadata = ModulithMetadata.of(AdditionalPackagesShadowing.class);
|
||||
|
||||
assertThat(metadata.getBasePackages()).containsExactly(getClass().getPackageName());
|
||||
}
|
||||
|
||||
@Modulith(additionalPackages = "com.acme.foo", //
|
||||
sharedModules = "shared.module", //
|
||||
systemName = "systemName", //
|
||||
@@ -82,4 +90,7 @@ class ModulithMetadataUnitTest {
|
||||
static class SpringBootApplicationAnnotated {}
|
||||
|
||||
static class Unannotated {}
|
||||
|
||||
@Modulithic(additionalPackages = "org.springframework.modulith.core")
|
||||
static class AdditionalPackagesShadowing {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user