From cbba1ab70ae7b0df8b9e883ebd81ef6bcdaa39b0 Mon Sep 17 00:00:00 2001 From: JFronny Date: Sat, 15 Jul 2023 00:00:27 +0200 Subject: [PATCH] support for testing offline via gradle-side reflection hacks and firejail --- buildSrc/java-offline | 2 ++ .../src/main/kotlin/inceptum.java.gradle.kts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100755 buildSrc/java-offline diff --git a/buildSrc/java-offline b/buildSrc/java-offline new file mode 100755 index 0000000..7f00408 --- /dev/null +++ b/buildSrc/java-offline @@ -0,0 +1,2 @@ +#!/bin/bash +firejail --net=none "$G_ORIGINAL_EXECUTABLE" "$@" \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/inceptum.java.gradle.kts b/buildSrc/src/main/kotlin/inceptum.java.gradle.kts index 37f5cc8..c97b26f 100644 --- a/buildSrc/src/main/kotlin/inceptum.java.gradle.kts +++ b/buildSrc/src/main/kotlin/inceptum.java.gradle.kts @@ -36,4 +36,23 @@ publishing { } } } +} + +afterEvaluate { + if (hasProperty("offline")) { + tasks.withType(JavaExec::class) { + environment("G_ORIGINAL_EXECUTABLE", executable ?: "java") + //TODO once we are not using a toolchain, just do executable(rootDir.resolve("buildSrc/java-offline")) + val originalMetadata = javaLauncher.get().metadata + val field = org.gradle.api.internal.provider.AbstractProperty::class.java.getDeclaredField("value") + field.isAccessible = true + val customLauncher = object: JavaLauncher { + override fun getMetadata(): JavaInstallationMetadata = originalMetadata + override fun getExecutablePath(): RegularFile = rootProject.layout.projectDirectory + .dir("buildSrc") + .file("java-offline") + } + field.set(javaLauncher, org.gradle.api.internal.provider.Providers.of(customLauncher)) + } + } } \ No newline at end of file