Skip to content

Commit dbfc4fd

Browse files
committed
Detect native-image-compatible JDK using Gradle toolchains
1 parent 3043c94 commit dbfc4fd

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts

+4-2
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ val test by testing.suites.getting(JvmTestSuite::class) {
227227

228228
val gradleJavaVersion = JavaVersion.current().majorVersion.toInt()
229229
jvmArgumentProviders += JavaHomeDir(project, gradleJavaVersion, develocity.testDistribution.enabled)
230+
jvmArgumentProviders += JavaHomeDir(project, gradleJavaVersion, develocity.testDistribution.enabled, nativeImage = true)
230231
systemProperty("gradle.java.version", gradleJavaVersion)
231232
}
232233
}
@@ -253,14 +254,15 @@ class MavenRepo(project: Project, @get:Internal val repoDir: Provider<File>) : C
253254
override fun asArguments() = listOf("-Dmaven.repo=${repoDir.get().absolutePath}")
254255
}
255256

256-
class JavaHomeDir(project: Project, @Input val version: Int, testDistributionEnabled: Provider<Boolean>) : CommandLineArgumentProvider {
257+
class JavaHomeDir(project: Project, @Input val version: Int, testDistributionEnabled: Provider<Boolean>, @Input val nativeImage: Boolean = false) : CommandLineArgumentProvider {
257258

258259
@Internal
259260
val javaLauncher: Property<JavaLauncher> = project.objects.property<JavaLauncher>()
260261
.value(project.provider {
261262
try {
262263
project.javaToolchains.launcherFor {
263264
languageVersion = JavaLanguageVersion.of(version)
265+
nativeImageCapable = nativeImage
264266
}.get()
265267
} catch (e: Exception) {
266268
null
@@ -276,7 +278,7 @@ class JavaHomeDir(project: Project, @Input val version: Int, testDistributionEna
276278
}
277279
val metadata = javaLauncher.map { it.metadata }
278280
val javaHome = metadata.map { it.installationPath.asFile.absolutePath }.orNull
279-
return javaHome?.let { listOf("-Djava.home.$version=$it") } ?: emptyList()
281+
return javaHome?.let { listOf("-Djava.home.$version${if (nativeImage) ".nativeImage" else ""}=$it") } ?: emptyList()
280282
}
281283
}
282284

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
org.gradle.java.installations.fromEnv=GRAALVM_HOME
2+
org.gradle.java.installations.auto-download=false

platform-tooling-support-tests/src/main/java/platform/tooling/support/Helper.java

+5
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,9 @@ public static Optional<Path> getJavaHome(int version) {
8282
);
8383
return sources.filter(Objects::nonNull).findFirst().map(Path::of);
8484
}
85+
86+
public static Optional<Path> getJavaHomeWithNativeImageSupport(int version) {
87+
var value = System.getProperty("java.home." + version + ".nativeImage");
88+
return Optional.ofNullable(value).map(Path::of);
89+
}
8590
}

platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/GraalVmStarterTests.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,19 @@
1313
import static java.util.concurrent.TimeUnit.MINUTES;
1414
import static org.assertj.core.api.Assertions.assertThat;
1515
import static org.junit.jupiter.api.Assertions.assertEquals;
16+
import static platform.tooling.support.Helper.getJavaHomeWithNativeImageSupport;
17+
import static platform.tooling.support.ProcessStarters.getGradleJavaVersion;
1618
import static platform.tooling.support.tests.Projects.copyToWorkspace;
1719

1820
import java.nio.file.Path;
1921

2022
import org.junit.jupiter.api.Order;
2123
import org.junit.jupiter.api.Test;
2224
import org.junit.jupiter.api.Timeout;
23-
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
2425
import org.junit.jupiter.api.extension.DisabledOnOpenJ9;
2526
import org.junit.jupiter.api.io.TempDir;
2627
import org.junit.platform.tests.process.OutputFiles;
28+
import org.opentest4j.TestAbortedException;
2729

2830
import platform.tooling.support.MavenRepo;
2931
import platform.tooling.support.ProcessStarters;
@@ -33,16 +35,20 @@
3335
*/
3436
@Order(Integer.MIN_VALUE)
3537
@DisabledOnOpenJ9
36-
@EnabledIfEnvironmentVariable(named = "GRAALVM_HOME", matches = ".+")
3738
class GraalVmStarterTests {
3839

3940
@Test
4041
@Timeout(value = 10, unit = MINUTES)
4142
void runsTestsInNativeImage(@TempDir Path workspace, @FilePrefix("gradle") OutputFiles outputFiles)
4243
throws Exception {
44+
45+
var graalVmHome = getJavaHomeWithNativeImageSupport(getGradleJavaVersion());
46+
4347
var result = ProcessStarters.gradlew() //
4448
.workingDir(copyToWorkspace(Projects.GRAALVM_STARTER, workspace)) //
45-
.addArguments("-Dmaven.repo=" + MavenRepo.dir()) //
49+
.putEnvironment("GRAALVM_HOME",
50+
graalVmHome.orElseThrow(TestAbortedException::new).toString()).addArguments(
51+
"-Dmaven.repo=" + MavenRepo.dir()) //
4652
.addArguments("javaToolchains", "nativeTest", "--no-daemon", "--stacktrace", "--no-build-cache",
4753
"--warning-mode=fail") //
4854
.redirectOutput(outputFiles) //

0 commit comments

Comments
 (0)