GH-798 - Guard against multiple non-unique module base packages.

This commit is contained in:
Oliver Drotbohm
2024-09-04 09:51:48 +02:00
parent 86eae791d1
commit b95b0c0d7d
3 changed files with 21 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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 {}
}