Do not exclude DevTools from Maven AOT processing classpath

When excluded from the AOT processing classpath, a reflection hint
for DevTools' RestartScopeInitializer that's registered in
spring.factories is not generated. When the native image is compiled
we have no control over its classpath so DevTools is included. This
causes a failure at runtime as RestartScopeInitializer cannot be
loaded due to the missing reflection hint.

Until we have control over the native image classpath, we need to
include DevTools on the AOT processing classpath and then rely on
DevTools disabling itself in a native image which it already does.

Fixes gh-35853
This commit is contained in:
Andy Wilkinson 2023-06-21 10:36:38 +01:00
parent 9a2b9cb066
commit 853caf9a59
2 changed files with 1 additions and 3 deletions

View File

@ -25,7 +25,6 @@ import org.springframework.util.ClassUtils;
public class SampleApplication {
public static void main(String[] args) {
Assert.state(!ClassUtils.isPresent("org.springframework.boot.devtools.autoconfigure.DevToolsProperties", null), "Should not have devtools");
Assert.state(!ClassUtils.isPresent("org.springframework.boot.docker.compose.core.DockerCompose", null), "Should not have docker-compose");
SpringApplication.run(SampleApplication.class, args);
}

View File

@ -111,8 +111,7 @@ public class ProcessAotMojo extends AbstractAotMojo {
private URL[] getClassPath() throws Exception {
File[] directories = new File[] { this.classesDirectory, this.generatedClasses };
return getClassPath(directories, new ExcludeTestScopeArtifactFilter(), DEVTOOLS_EXCLUDE_FILTER,
DOCKER_COMPOSE_EXCLUDE_FILTER);
return getClassPath(directories, new ExcludeTestScopeArtifactFilter(), DOCKER_COMPOSE_EXCLUDE_FILTER);
}
private RunArguments resolveArguments() {