diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java index 07b7b813d9..b8292397b9 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/SpringBootAotPlugin.java @@ -33,6 +33,7 @@ import org.gradle.api.provider.Provider; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.SourceSetContainer; import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.compile.JavaCompile; import org.springframework.boot.gradle.tasks.aot.AbstractAot; import org.springframework.boot.gradle.tasks.aot.ProcessAot; @@ -115,13 +116,16 @@ public class SpringBootAotPlugin implements Plugin { private void registerProcessAotTask(Project project, SourceSet aotSourceSet) { TaskProvider resolveMainClassName = project.getTasks() .named(SpringBootPlugin.RESOLVE_MAIN_CLASS_NAME_TASK_NAME, ResolveMainClassName.class); + Provider aotClasses = project.getLayout().getBuildDirectory().dir("generated/aotClasses"); TaskProvider processAot = project.getTasks().register(PROCESS_AOT_TASK_NAME, ProcessAot.class, (task) -> { - configureAotTask(project, aotSourceSet, task, - project.getLayout().getBuildDirectory().dir("generated/aotClasses")); + configureAotTask(project, aotSourceSet, task, aotClasses); task.getApplicationClass() .set(resolveMainClassName.flatMap(ResolveMainClassName::readMainClassName)); }); + project.getTasks().named(aotSourceSet.getCompileJavaTaskName(), JavaCompile.class).configure( + (javaCompile) -> javaCompile.setClasspath(javaCompile.getClasspath().plus(project.files(aotClasses)))); + aotSourceSet.getOutput().dir(aotClasses); configureDependsOn(project, aotSourceSet, processAot); } @@ -133,7 +137,6 @@ public class SpringBootAotPlugin implements Plugin { task.getClassesDir().set(generatedClasses); task.getGroupId().set(project.provider(() -> String.valueOf(project.getGroup()))); task.getArtifactId().set(project.provider(() -> project.getName())); - sourceSet.getOutput().dir(generatedClasses); } private void configureDependsOn(Project project, SourceSet aotSourceSet, diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java index 35f33eabb0..d94305663a 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractAotMojo.java @@ -137,10 +137,11 @@ public abstract class AbstractAotMojo extends AbstractDependencyFilterMojo { } } - protected final URL[] getClassPath(File classesDirectory, ArtifactsFilter... artifactFilters) - throws MojoExecutionException { + protected final URL[] getClassPath(File classesDirectory, File generatedClassesDirectory, + ArtifactsFilter... artifactFilters) throws MojoExecutionException { List urls = new ArrayList<>(); urls.add(toURL(classesDirectory)); + urls.add(toURL(generatedClassesDirectory)); urls.addAll(getDependencyURLs(artifactFilters)); return urls.toArray(URL[]::new); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java index cf5d124b30..238b478ba7 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessAotMojo.java @@ -107,7 +107,7 @@ public class ProcessAotMojo extends AbstractAotMojo { } protected URL[] getClassPath() throws Exception { - return getClassPath(this.classesDirectory, new ExcludeTestScopeArtifactFilter()); + return getClassPath(this.classesDirectory, this.generatedClasses, new ExcludeTestScopeArtifactFilter()); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java index 423d058f6b..f4a1045370 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ProcessTestAotMojo.java @@ -133,7 +133,7 @@ public class ProcessTestAotMojo extends AbstractAotMojo { } protected URL[] getClassPath(boolean includeJUnitPlatformLauncher) throws Exception { - URL[] classPath = getClassPath(this.classesDirectory); + URL[] classPath = getClassPath(this.classesDirectory, this.generatedClasses); if (!includeJUnitPlatformLauncher || this.project.getArtifactMap() .containsKey(JUNIT_PLATFORM_GROUP_ID + ":" + JUNIT_PLATFORM_LAUNCHER_ARTIFACT_ID)) { return classPath;