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.JavaPluginExtension; | ||||
| 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.BootJar; | ||||
|  | @ -60,8 +59,7 @@ class NativeImagePluginAction implements PluginApplicationAction { | |||
| 			SourceSetContainer sourceSets = javaPluginExtension.getSourceSets(); | ||||
| 			GraalVMExtension graalVmExtension = configureGraalVmExtension(project); | ||||
| 			configureMainNativeBinaryClasspath(project, sourceSets, graalVmExtension); | ||||
| 			configureTestNativeBinaryClasspath(sourceSets, graalVmExtension, | ||||
| 					SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME); | ||||
| 			configureTestNativeBinaryClasspath(project, sourceSets, graalVmExtension); | ||||
| 			configureGraalVmReachabilityExtension(graalVmExtension); | ||||
| 			copyReachabilityMetadataToBootJar(project); | ||||
| 			configureBootBuildImageToProduceANativeImage(project); | ||||
|  | @ -86,10 +84,11 @@ class NativeImagePluginAction implements PluginApplicationAction { | |||
| 		return !SpringBootPlugin.DEVELOPMENT_ONLY_CONFIGURATION_NAME.equals(configuration.getName()); | ||||
| 	} | ||||
| 
 | ||||
| 	private void configureTestNativeBinaryClasspath(SourceSetContainer sourceSets, GraalVMExtension graalVmExtension, | ||||
| 			String sourceSetName) { | ||||
| 		SourceSetOutput output = sourceSets.getByName(SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME).getOutput(); | ||||
| 		graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_TEST_EXTENSION).classpath(output); | ||||
| 	private void configureTestNativeBinaryClasspath(Project project, SourceSetContainer sourceSets, | ||||
| 			GraalVMExtension graalVmExtension) { | ||||
| 		FileCollection runtimeClasspath = sourceSets.getByName(SpringBootAotPlugin.AOT_TEST_SOURCE_SET_NAME) | ||||
| 				.getRuntimeClasspath(); | ||||
| 		graalVmExtension.getBinaries().getByName(NativeImagePlugin.NATIVE_TEST_EXTENSION).classpath(runtimeClasspath); | ||||
| 	} | ||||
| 
 | ||||
| 	private GraalVMExtension configureGraalVmExtension(Project project) { | ||||
|  |  | |||
|  | @ -101,6 +101,24 @@ class NativeImagePluginActionIntegrationTests { | |||
| 		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() { | ||||
| 		File examplePackage = new File(this.gradleBuild.getProjectDir(), "src/main/java/org/springframework/boot"); | ||||
| 		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