GH-520 - Early reject invalid ApplicationModules bootstraps.

We now immediately reject the ApplicationModules bootstrap in case the initial scanning of the root packages yield no classes at all.
This commit is contained in:
Oliver Drotbohm
2024-03-05 17:46:13 +01:00
parent c45a0fc9b7
commit e41d7ec083
8 changed files with 159 additions and 5 deletions

View File

@@ -29,11 +29,13 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Role;
import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.modulith.ApplicationModuleInitializer;
import org.springframework.modulith.core.ApplicationModule;
import org.springframework.modulith.core.ApplicationModules;
import org.springframework.modulith.core.ApplicationModulesFactory;
import org.springframework.modulith.core.FormatableType;
import org.springframework.modulith.runtime.ApplicationModulesRuntime;
import org.springframework.modulith.runtime.ApplicationRuntime;
@@ -138,12 +140,21 @@ class SpringModulithRuntimeAutoConfiguration {
private static class ApplicationModulesBootstrap {
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationModulesBootstrap.class);
private static final ApplicationModulesFactory BOOTSTRAP;
static {
var factories = SpringFactoriesLoader.loadFactories(ApplicationModulesFactory.class,
ApplicationModulesBootstrap.class.getClassLoader());
BOOTSTRAP = !factories.isEmpty() ? factories.get(0) : ApplicationModulesFactory.defaultFactory();
}
static ApplicationModules initializeApplicationModules(Class<?> applicationMainClass) {
LOGGER.debug("Obtaining Spring Modulith application modules…");
var result = ApplicationModules.of(applicationMainClass);
var result = BOOTSTRAP.of(applicationMainClass);
var numberOfModules = result.stream().count();
if (numberOfModules == 0) {
@@ -153,7 +164,7 @@ class SpringModulithRuntimeAutoConfiguration {
} else {
LOGGER.debug("Detected {} application modules: {}", //
result.stream().count(), //
numberOfModules, //
result.stream().map(ApplicationModule::getName).toList());
}