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
pull/36038/head
Andy Wilkinson 1 year ago
parent 9a2b9cb066
commit 853caf9a59

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

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

Loading…
Cancel
Save