From 40b18c99c2d4a81f366226587c61a4ebd60f9db9 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Wed, 10 Jun 2026 08:40:07 +0800 Subject: [PATCH] improved GraalVM plugin --- .../graalvm/NativeImageConfigurationTask.java | 7 ++++--- .../gradle/graalvm/NativeImageExtension.java | 5 +++++ .../gradle/graalvm/NativeImagePlugin.java | 4 ++-- .../woggioni/gradle/graalvm/NativeImageTask.java | 15 ++++++++++++++- gradle.properties | 4 ++-- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java index 9279f80..b6b0ebd 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageConfigurationTask.java @@ -58,9 +58,10 @@ public abstract class NativeImageConfigurationTask extends JavaExec { JavaPluginExtension javaExtension = getProject().getExtensions().getByType(JavaPluginExtension.class); ExtensionContainer ext = getProject().getExtensions(); Property javaLauncherProperty = getJavaLauncher(); - Optional.ofNullable(ext.findByType(JavaToolchainService.class)) - .flatMap(ts -> Optional.of(toolchain).map(ts::launcherFor)) - .ifPresent(javaLauncherProperty::convention); + javaLauncherProperty.set(getProject().provider(() -> Optional.of(toolchain).orElseGet(javaExtension::getToolchain)).flatMap(toolchainSpec -> { + final JavaToolchainService jts = ext.findByType(JavaToolchainService.class); + return jts.launcherFor(toolchainSpec); + })); if(!Objects.isNull(javaApplication)) { getMainClass().convention(javaApplication.getMainClass()); getMainModule().convention(javaApplication.getMainModule()); diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageExtension.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageExtension.java index 6e3a6d0..d5ccf71 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageExtension.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageExtension.java @@ -2,7 +2,9 @@ package net.woggioni.gradle.graalvm; import org.gradle.api.Action; import org.gradle.api.file.FileCollection; +import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Nested; import org.gradle.jvm.toolchain.JavaToolchainSpec; @@ -15,6 +17,7 @@ public interface NativeImageExtension { JavaToolchainSpec toolchain(Action action); + ListProperty getJvmArgs(); Property getUseMusl(); Property getBuildStaticImage(); Property getEnableFallback(); @@ -28,5 +31,7 @@ public interface NativeImageExtension { Property getUseLZMA(); + Property getVerbose(); + Property getCompressionLevel(); } diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImagePlugin.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImagePlugin.java index 0337f59..a6a051e 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImagePlugin.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImagePlugin.java @@ -15,8 +15,6 @@ import org.gradle.api.provider.Provider; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.TaskContainer; import org.gradle.jvm.tasks.Jar; -import org.gradle.jvm.toolchain.JavaToolchainSpec; -import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec; @CacheableTask public class NativeImagePlugin implements Plugin { @@ -93,9 +91,11 @@ public class NativeImagePlugin implements Plugin { jts.getLanguageVersion().convention(nativeImageExtension.getToolchain().getLanguageVersion()); }); + nativeImageTask.getJvmArgs().set(nativeImageExtension.getJvmArgs()); nativeImageTask.getBuildStaticImage().set(nativeImageExtension.getBuildStaticImage()); nativeImageTask.getUseMusl().set(nativeImageExtension.getUseMusl()); nativeImageTask.getLinkAtBuildTime().set(nativeImageExtension.getLinkAtBuildTime()); + nativeImageTask.getLinkAtBuildTime().set(nativeImageExtension.getVerbose()); nativeImageTask.getMainClass().set(nativeImageExtension.getMainClass()); nativeImageTask.getMainModule().set(nativeImageExtension.getMainModule()); nativeImageTask.getEnableFallback().set(nativeImageExtension.getEnableFallback()); diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java index 93299af..21085b5 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/NativeImageTask.java @@ -13,6 +13,7 @@ import org.gradle.api.model.ObjectFactory; import org.gradle.api.plugins.BasePluginExtension; import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.JavaApplication; +import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.CacheableTask; @@ -65,6 +66,8 @@ public abstract class NativeImageTask extends Exec { @PathSensitive(PathSensitivity.ABSOLUTE) public abstract RegularFileProperty getNativeCompilerPath(); + @Input + public abstract ListProperty getJvmArgs(); @Input public abstract Property getUseMusl(); @Input @@ -73,7 +76,8 @@ public abstract class NativeImageTask extends Exec { public abstract Property getEnableFallback(); @Input public abstract Property getLinkAtBuildTime(); - + @Input + public abstract Property getVerbose(); @Input public abstract Property getMainClass(); @@ -143,6 +147,12 @@ public abstract class NativeImageTask extends Exec { @Override public Iterable asArguments() { List result = new ArrayList<>(); + if(getJvmArgs().isPresent()) { + final List jvmArgs = getJvmArgs().get(); + for(final String arg : jvmArgs) { + result.add("-J" + arg); + } + } if(!getEnableFallback().get()) { result.add("--no-fallback"); } @@ -155,6 +165,9 @@ public abstract class NativeImageTask extends Exec { if(getLinkAtBuildTime().get()) { result.add("--link-at-build-time"); } + if(getVerbose().get()) { + result.add("--verbose"); + } if(getNativeCompilerPath().isPresent()) { result.add("--native-compiler-path=" + getNativeCompilerPath().getAsFile().get()); } diff --git a/gradle.properties b/gradle.properties index 50a3b20..aab1de5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -lys.catalog.version=2026.05.27 -version.myGradlePlugins=2026.06.07 +lys.catalog.version=2026.06.08 +version.myGradlePlugins=2026.06.09 version.gradle=8.14.5 gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven