Include AOT-generated classes in native test binary
Closes gh-32940
This commit is contained in:
parent
2b29a10d5b
commit
2d5a3eac51
|
|
@ -32,7 +32,6 @@ import org.gradle.api.plugins.ExtensionAware;
|
||||||
import org.gradle.api.plugins.JavaPlugin;
|
import org.gradle.api.plugins.JavaPlugin;
|
||||||
import org.gradle.api.plugins.JavaPluginExtension;
|
import org.gradle.api.plugins.JavaPluginExtension;
|
||||||
import org.gradle.api.tasks.SourceSetContainer;
|
import org.gradle.api.tasks.SourceSetContainer;
|
||||||
import org.gradle.api.tasks.SourceSetOutput;
|
|
||||||
|
|
||||||
import org.springframework.boot.gradle.tasks.bundling.BootBuildImage;
|
import org.springframework.boot.gradle.tasks.bundling.BootBuildImage;
|
||||||
import org.springframework.boot.gradle.tasks.bundling.BootJar;
|
import org.springframework.boot.gradle.tasks.bundling.BootJar;
|
||||||
|
|
@ -60,8 +59,7 @@ class NativeImagePluginAction implements PluginApplicationAction {
|
||||||
SourceSetContainer sourceSets = javaPluginExtension.getSourceSets();
|
SourceSetContainer sourceSets = javaPluginExtension.getSourceSets();
|
||||||
GraalVMExtension graalVmExtension = configureGraalVmExtension(project);
|
GraalVMExtension graalVmExtension = configureGraalVmExtension(project);
|
||||||
configureMainNativeBinaryClasspath(project, sourceSets, graalVmExtension);
|
configureMainNativeBinaryClasspath(project, sourceSets, graalVmExtension);
|
||||||
configureTestNativeBinaryClasspath(sourceSets, graalVmExtension,
|
configureTestNativeBinaryClasspath(project, sourceSets, graalVmExtension);
|
||||||
SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME);
|
|
||||||
configureGraalVmReachabilityExtension(graalVmExtension);
|
configureGraalVmReachabilityExtension(graalVmExtension);
|
||||||
copyReachabilityMetadataToBootJar(project);
|
copyReachabilityMetadataToBootJar(project);
|
||||||
configureBootBuildImageToProduceANativeImage(project);
|
configureBootBuildImageToProduceANativeImage(project);
|
||||||
|
|
@ -86,10 +84,11 @@ class NativeImagePluginAction implements PluginApplicationAction {
|
||||||
return !SpringBootPlugin.DEVELOPMENT_ONLY_CONFIGURATION_NAME.equals(configuration.getName());
|
return !SpringBootPlugin.DEVELOPMENT_ONLY_CONFIGURATION_NAME.equals(configuration.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configureTestNativeBinaryClasspath(SourceSetContainer sourceSets, GraalVMExtension graalVmExtension,
|
private void configureTestNativeBinaryClasspath(Project project, SourceSetContainer sourceSets,
|
||||||
String sourceSetName) {
|
GraalVMExtension graalVmExtension) {
|
||||||
SourceSetOutput output = sourceSets.getByName(SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME).getOutput();
|
FileCollection runtimeClasspath = sourceSets.getByName(SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME)
|
||||||
graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_TEST_EXTENSION).classpath(output);
|
.getRuntimeClasspath();
|
||||||
|
graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_TEST_EXTENSION).classpath(runtimeClasspath);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GraalVMExtension configureGraalVmExtension(Project project) {
|
private GraalVMExtension configureGraalVmExtension(Project project) {
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,24 @@ class NativeImagePluginActionIntegrationTests {
|
||||||
assertThat(result.getOutput()).doesNotContain("commons-lang");
|
assertThat(result.getOutput()).doesNotContain("commons-lang");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestTemplate
|
||||||
|
void classesGeneratedDuringAotProcessingAreOnTheNativeImageClasspath() {
|
||||||
|
BuildResult result = this.gradleBuild.build("checkNativeImageClasspath");
|
||||||
|
assertThat(result.getOutput()).contains(projectPath("build/classes/java/aot"),
|
||||||
|
projectPath("build/resources/aot"), projectPath("build/generated/aotClasses"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestTemplate
|
||||||
|
void classesGeneratedDuringAotTestProcessingAreOnTheTestNativeImageClasspath() {
|
||||||
|
BuildResult result = this.gradleBuild.build("checkTestNativeImageClasspath");
|
||||||
|
assertThat(result.getOutput()).contains(projectPath("build/classes/java/aotTest"),
|
||||||
|
projectPath("build/resources/aotTest"), projectPath("build/generated/aotTestClasses"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String projectPath(String path) {
|
||||||
|
return new File(this.gradleBuild.getProjectDir(), path).getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
private void writeDummySpringApplicationAotProcessorMainClass() {
|
private void writeDummySpringApplicationAotProcessorMainClass() {
|
||||||
File examplePackage = new File(this.gradleBuild.getProjectDir(), "src/main/java/org/springframework/boot");
|
File examplePackage = new File(this.gradleBuild.getProjectDir(), "src/main/java/org/springframework/boot");
|
||||||
examplePackage.mkdirs();
|
examplePackage.mkdirs();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
plugins {
|
||||||
|
id 'org.springframework.boot' version '{version}'
|
||||||
|
id 'java'
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'org.graalvm.buildtools.native'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
task('checkNativeImageClasspath') {
|
||||||
|
doFirst {
|
||||||
|
tasks.nativeCompile.options.get().classpath.each { println it }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
plugins {
|
||||||
|
id 'org.springframework.boot' version '{version}'
|
||||||
|
id 'java'
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'org.graalvm.buildtools.native'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
task('checkTestNativeImageClasspath') {
|
||||||
|
doFirst {
|
||||||
|
tasks.nativeTestCompile.options.get().classpath.each { println it }
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue