Skip to content

Commit 636b598

Browse files
committed
GH-797 - Guard against multiple non-unique module base packages.
1 parent 1062f53 commit 636b598

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

spring-modulith-core/src/main/java/org/springframework/modulith/core/AnnotationModulithMetadata.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,14 @@ public Optional<String> getSystemName() {
134134
@Override
135135
public List<String> getBasePackages() {
136136

137-
var result = new ArrayList<>(List.of(basePackage));
138-
result.addAll(List.of(annotation.additionalPackages()));
137+
var result = new ArrayList<String>();
138+
result.add(basePackage);
139+
140+
for (var candidate : annotation.additionalPackages()) {
141+
if (!result.contains(candidate)) {
142+
result.add(candidate);
143+
}
144+
}
139145

140146
return result;
141147
}

spring-modulith-core/src/main/java/org/springframework/modulith/core/ApplicationModules.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ protected ApplicationModules(ModulithMetadata metadata, Collection<String> packa
141141
pkgs -> importer.importPackages(pkgs).that(not(excluded)), strategy, useFullyQualifiedModuleNames);
142142

143143
var directSources = packages.stream() //
144+
.distinct()
144145
.map(it -> JavaPackage.of(classes, it))
145146
.flatMap(it -> ApplicationModuleSource.from(it, strategy, useFullyQualifiedModuleNames));
146147

@@ -158,6 +159,7 @@ protected ApplicationModules(ModulithMetadata metadata, Collection<String> packa
158159
.collect(toMap(ApplicationModule::getName, Function.identity()));
159160

160161
this.rootPackages = Stream.concat(packages.stream(), contributions.getRootPackages()) //
162+
.distinct()
161163
.map(it -> JavaPackage.of(classes, it).toSingle()) //
162164
.toList();
163165

spring-modulith-core/src/test/java/org/springframework/modulith/core/ModulithMetadataUnitTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ public void rejectsTypeNotAnnotatedWithEitherModulithAnnotationOrSpringBootAppli
6666
.withMessageContaining(SpringBootApplication.class.getSimpleName());
6767
}
6868

69+
@Test // GH-797
70+
void returnsUniqueBasePackages() {
71+
72+
var metadata = ModulithMetadata.of(AdditionalPackagesShadowing.class);
73+
74+
assertThat(metadata.getBasePackages()).containsExactly(getClass().getPackageName());
75+
}
76+
6977
@Modulith(additionalPackages = "com.acme.foo", //
7078
sharedModules = "shared.module", //
7179
systemName = "systemName", //
@@ -82,4 +90,7 @@ static class ModuliticAnnotated {}
8290
static class SpringBootApplicationAnnotated {}
8391

8492
static class Unannotated {}
93+
94+
@Modulithic(additionalPackages = "org.springframework.modulith.core")
95+
static class AdditionalPackagesShadowing {}
8596
}

0 commit comments

Comments
 (0)