From e0d86281881589b7f55968408cd8b749ff5642f4 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Wed, 5 Feb 2025 21:37:05 +0800 Subject: [PATCH] added `compressionLevel` and `bindServices` properties to the jlink task --- .../woggioni/gradle/graalvm/JlinkPlugin.java | 3 ++ .../woggioni/gradle/graalvm/JlinkTask.java | 32 +++++++++++++++---- gradle.properties | 4 +-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkPlugin.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkPlugin.java index 0d730fc..d34de0e 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkPlugin.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkPlugin.java @@ -49,5 +49,8 @@ public class JlinkPlugin implements Plugin { zip.from(jlinTaskProvider); }); + tasks.named(JLINK_TASK_NAME, JlinkTask.class, jlinkTask -> { + jlinkTask.finalizedBy(jlinkZipTaskProvider); + }); } } diff --git a/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java b/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java index 498dc80..e5ad0f2 100644 --- a/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java +++ b/graalvm/src/main/java/net/woggioni/gradle/graalvm/JlinkTask.java @@ -6,8 +6,8 @@ import org.gradle.api.file.Directory; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.FileCollection; import org.gradle.api.file.ProjectLayout; -import org.gradle.api.file.RegularFileProperty; import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; import org.gradle.api.plugins.BasePluginExtension; import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.JavaApplication; @@ -21,7 +21,6 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputDirectory; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputDirectory; -import org.gradle.api.tasks.OutputFile; import org.gradle.internal.jvm.JavaModuleDetector; import org.gradle.jvm.toolchain.JavaInstallationMetadata; import org.gradle.jvm.toolchain.JavaLauncher; @@ -60,15 +59,23 @@ public abstract class JlinkTask extends Exec { @Input public abstract ListProperty getAdditionalModules(); + @Input + public abstract Property getBindServices(); + + @Input + @Optional + public abstract Property getCompressionLevel(); + @Inject protected abstract JavaModuleDetector getJavaModuleDetector(); @OutputDirectory public abstract DirectoryProperty getOutputDir(); - private final Logger logger; + + private static final Logger log = Logging.getLogger(JlinkTask.class); + public JlinkTask() { Project project = getProject(); - logger = project.getLogger(); setGroup(GRAALVM_TASK_GROUP); setDescription( "Generates a custom Java runtime image that contains only the platform modules" + @@ -90,6 +97,7 @@ public abstract class JlinkTask extends Exec { ).orElseGet(() -> layout.dir(project.provider(() ->project.file(System.getProperty("java.home"))))); getGraalVmHome().convention(graalHomeDirectoryProvider); getAdditionalModules().convention(new ArrayList<>()); + getBindServices().convention(false); BasePluginExtension basePluginExtension = ext.getByType(BasePluginExtension.class); @@ -110,7 +118,13 @@ public abstract class JlinkTask extends Exec { @SneakyThrows public Iterable asArguments() { List result = new ArrayList<>(); - result.add("--compress=2"); + final Property compressionLevelProperty= getCompressionLevel(); + if(compressionLevelProperty.isPresent()) { + result.add(String.format("--compress=zip-%d", compressionLevelProperty.get())); + } + if(getBindServices().get()) { + result.add("--bind-services"); + } JavaModuleDetector javaModuleDetector = getJavaModuleDetector(); FileCollection classpath = getClasspath().get(); FileCollection mp = javaModuleDetector.inferModulePath(true, classpath); @@ -131,8 +145,12 @@ public abstract class JlinkTask extends Exec { List additionalModules = getAdditionalModules().get(); if(getMainModule().isPresent() || !additionalModules.isEmpty()) { result.add("--add-modules"); - ofNullable(getMainModule().getOrElse(null)).ifPresent(result::add); - additionalModules.forEach(result::add); + final List modules2BeAdded = new ArrayList<>(); + ofNullable(getMainModule().getOrElse(null)).ifPresent(modules2BeAdded::add); + modules2BeAdded.addAll(additionalModules); + if(!modules2BeAdded.isEmpty()) { + result.add(String.join(",", modules2BeAdded)); + } } return Collections.unmodifiableList(result); } diff --git a/gradle.properties b/gradle.properties index ad927d8..4dd763b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -lys.catalog.version=2025.01.17 -version.myGradlePlugins=2025.01.24 +lys.catalog.version=2025.01.31 +version.myGradlePlugins=2025.02.05 version.gradle=8.12 gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven \ No newline at end of file