Skip to content

Commit 76b34f3

Browse files
committed
GH-1644 - Improve main application class detection in ModuleTestExecution.
ModuleTestExcution now prefers @SpringBootApplication annotations on classes explicitly listed in @ModuleSlicing.classes() and its derivatives.
1 parent b20913c commit 76b34f3

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleTestExecution.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.ArrayList;
1919
import java.util.Arrays;
20+
import java.util.Collection;
2021
import java.util.Iterator;
2122
import java.util.List;
2223
import java.util.Map;
@@ -296,13 +297,26 @@ private static Class<?> findSpringBootApplicationByClasses(Class<?> testClass, L
296297
var candidates = new ArrayList<>(additionalTypes);
297298
candidates.add(testClass);
298299

299-
return candidates.stream()
300-
.<Class<?>> map(ModuleTestExecution::lookupSpringBootApplicationAnnotation)
301-
.findFirst()
300+
return findClassAnnotatedWithAtSpringBoot(candidates)
301+
.or(() -> scanForClassAnnotatedWithSpringBoot(candidates))
302302
.orElseThrow(() -> new IllegalStateException("Couldn't find @SpringBootApplication traversing %s."
303303
.formatted(candidates.stream().map(Class::getName).collect(Collectors.joining(", ")))));
304304
}
305305

306+
private static Optional<Class<?>> findClassAnnotatedWithAtSpringBoot(Collection<Class<?>> candidates) {
307+
308+
return candidates.stream()
309+
.filter(it -> AnnotatedElementUtils.hasAnnotation(it, SpringBootApplication.class))
310+
.findFirst();
311+
}
312+
313+
private static Optional<Class<?>> scanForClassAnnotatedWithSpringBoot(Collection<Class<?>> candidates) {
314+
315+
return candidates.stream()
316+
.<Class<?>> map(ModuleTestExecution::lookupSpringBootApplicationAnnotation)
317+
.findFirst();
318+
}
319+
306320
private static Class<?> lookupSpringBootApplicationAnnotation(Class<?> clazz) {
307321

308322
return MODULITH_TYPES.computeIfAbsent(clazz,

0 commit comments

Comments
 (0)