Report friendly error when failing to find AOT initializer
See gh-38188
This commit is contained in:
committed by
Moritz Halbritter
parent
8733c8cd36
commit
8126d2652d
@@ -168,6 +168,7 @@ import org.springframework.util.function.ThrowingSupplier;
|
||||
* @author Chris Bono
|
||||
* @author Moritz Halbritter
|
||||
* @author Tadaya Tsuyukubo
|
||||
* @author Yanming Zhou
|
||||
* @since 1.0.0
|
||||
* @see #run(Class, String[])
|
||||
* @see #run(Class[], String[])
|
||||
@@ -436,6 +437,12 @@ public class SpringApplication {
|
||||
initializers.stream().filter(AotApplicationContextInitializer.class::isInstance).toList());
|
||||
if (aotInitializers.isEmpty()) {
|
||||
String initializerClassName = this.mainApplicationClass.getName() + "__ApplicationContextInitializer";
|
||||
if (!ClassUtils.isPresent(initializerClassName, getClassLoader())) {
|
||||
throw new IllegalArgumentException(
|
||||
"You are starting application with AOT mode but not AOT-processed,"
|
||||
+ " please build your application with AOT first."
|
||||
+ " Or remove system property 'spring.aot.enabled=true' to run as regular mode.");
|
||||
}
|
||||
aotInitializers.add(AotApplicationContextInitializer.forInitializerClasses(initializerClassName));
|
||||
}
|
||||
initializers.removeAll(aotInitializers);
|
||||
|
||||
@@ -163,6 +163,7 @@ import static org.mockito.Mockito.spy;
|
||||
* @author Sebastien Deleuze
|
||||
* @author Moritz Halbritter
|
||||
* @author Tadaya Tsuyukubo
|
||||
* @author Yanming Zhou
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
class SpringApplicationTests {
|
||||
@@ -1375,6 +1376,21 @@ class SpringApplicationTests {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReportFriendlyErrorIfAotInitializerNotFound() {
|
||||
SpringApplication application = new SpringApplication(TestSpringApplication.class);
|
||||
application.setWebApplicationType(WebApplicationType.NONE);
|
||||
application.setMainApplicationClass(TestSpringApplication.class);
|
||||
System.setProperty(AotDetector.AOT_ENABLED, "true");
|
||||
try {
|
||||
assertThatIllegalArgumentException().isThrownBy(application::run)
|
||||
.withMessageContaining(AotDetector.AOT_ENABLED);
|
||||
}
|
||||
finally {
|
||||
System.clearProperty(AotDetector.AOT_ENABLED);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void fromRunsWithAdditionalSources() {
|
||||
assertThat(ExampleAdditionalConfig.local.get()).isNull();
|
||||
|
||||
Reference in New Issue
Block a user