Stop configuring AOT-generated classes as output of AOT source set

Closes gh-32940
This commit is contained in:
Andy Wilkinson 2022-10-31 17:28:45 +00:00
parent 2bb9b2640e
commit 0103e24bbb
2 changed files with 10 additions and 8 deletions

View File

@ -27,6 +27,7 @@ import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.file.FileCollection;
import org.gradle.api.plugins.ExtensionAware;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginExtension;
@ -69,8 +70,9 @@ class NativeImagePluginAction implements PluginApplicationAction {
private void configureMainNativeBinaryClasspath(Project project, SourceSetContainer sourceSets,
GraalVMExtension graalVmExtension) {
SourceSetOutput output = sourceSets.getByName(SpringBootAotPlugin.AOT_SOURCE_SET_NAME).getOutput();
graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_MAIN_EXTENSION).classpath(output);
FileCollection runtimeClasspath = sourceSets.getByName(SpringBootAotPlugin.AOT_SOURCE_SET_NAME)
.getRuntimeClasspath();
graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_MAIN_EXTENSION).classpath(runtimeClasspath);
Configuration nativeImageClasspath = project.getConfigurations().getByName("nativeImageClasspath");
nativeImageClasspath.setExtendsFrom(removeDevelopmentOnly(nativeImageClasspath.getExtendsFrom()));
}

View File

@ -89,8 +89,7 @@ public class SpringBootAotPlugin implements Plugin<Project> {
return sourceSets.create(newSourceSetName, (sourceSet) -> {
sourceSet.getJava().setSrcDirs(List.of("build/generated/" + newSourceSetName + "Sources"));
sourceSet.getResources().setSrcDirs(List.of("build/generated/" + newSourceSetName + "Resources"));
project.getDependencies().add(existingSourceSet.getRuntimeClasspathConfigurationName(),
project.files(sourceSet.getOutput()));
existingSourceSet.setRuntimeClasspath(existingSourceSet.getRuntimeClasspath().plus(sourceSet.getOutput()));
project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName())
.attributes((attributes) -> {
configureClassesAndResourcesLibraryElementsAttribute(project, attributes);
@ -116,6 +115,7 @@ public class SpringBootAotPlugin implements Plugin<Project> {
Provider<Directory> aotClasses = project.getLayout().getBuildDirectory().dir("generated/aotClasses");
Configuration aotClasspath = createAotProcessingClasspath(project, PROCESS_AOT_TASK_NAME, mainSourceSet);
project.getDependencies().add(aotClasspath.getName(), project.files(mainSourceSet.getOutput()));
mainSourceSet.setRuntimeClasspath(mainSourceSet.getRuntimeClasspath().plus(project.files(aotClasses)));
Configuration compileClasspath = project.getConfigurations()
.getByName(aotSourceSet.getCompileClasspathConfigurationName());
compileClasspath.extendsFrom(aotClasspath);
@ -127,7 +127,6 @@ public class SpringBootAotPlugin implements Plugin<Project> {
task.setClasspath(aotClasspath);
});
project.getDependencies().add(aotSourceSet.getImplementationConfigurationName(), project.files(aotClasses));
aotSourceSet.getOutput().dir(aotClasses);
configureDependsOn(project, aotSourceSet, processAot);
}
@ -172,20 +171,21 @@ public class SpringBootAotPlugin implements Plugin<Project> {
SourceSet testSourceSet) {
Provider<Directory> aotTestClasses = project.getLayout().getBuildDirectory().dir("generated/aotTestClasses");
Configuration aotClasspath = createAotProcessingClasspath(project, PROCESS_TEST_AOT_TASK_NAME, testSourceSet);
project.getDependencies().add(aotClasspath.getName(), project.files(mainSourceSet.getOutput()));
project.getDependencies().add(aotClasspath.getName(), project.files(testSourceSet.getOutput()));
testSourceSet.setRuntimeClasspath(testSourceSet.getRuntimeClasspath().plus(project.files(aotTestClasses)));
Configuration compileClasspath = project.getConfigurations()
.getByName(aotTestSourceSet.getCompileClasspathConfigurationName());
compileClasspath.extendsFrom(aotClasspath);
TaskProvider<ProcessTestAot> processTestAot = project.getTasks().register(PROCESS_TEST_AOT_TASK_NAME,
ProcessTestAot.class, (task) -> {
configureAotTask(project, aotTestSourceSet, task, aotTestClasses, testSourceSet);
task.setClasspath(project.getObjects().fileCollection().from(aotClasspath,
mainSourceSet.getOutput(), testSourceSet.getOutput()));
task.setClasspath(aotClasspath);
task.setTestRuntimeClasspath(
project.getConfigurations().getByName(testSourceSet.getImplementationConfigurationName()));
});
project.getDependencies().add(aotTestSourceSet.getImplementationConfigurationName(),
project.files(aotTestClasses));
aotTestSourceSet.getOutput().dir(aotTestClasses);
configureDependsOn(project, aotTestSourceSet, processTestAot);
}