From ec78605da0bfb4c0ef2167a10ebaf457c5f69ed7 Mon Sep 17 00:00:00 2001 From: Ryan Dens Date: Mon, 20 Feb 2023 21:21:32 -0800 Subject: [PATCH] :sparkles: Enable jlink task and plugin to be configured with its command line options. Provide sensible defaults for most users --- .../com/ryandens/jlink/JlinkJreExtension.kt | 17 +++++++ .../com/ryandens/jlink/JlinkJrePlugin.kt | 10 ++++ .../com/ryandens/jlink/tasks/JlinkJreTask.kt | 49 ++++++++++++++++++- 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJreExtension.kt b/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJreExtension.kt index 80ca460..0cb0c0a 100644 --- a/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJreExtension.kt +++ b/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJreExtension.kt @@ -1,6 +1,7 @@ package com.ryandens.jlink import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property abstract class JlinkJreExtension { @@ -9,4 +10,20 @@ abstract class JlinkJreExtension { } abstract val modules: ListProperty + + abstract val compress: Property + + abstract val stripDebug: Property + + abstract val noHeaderFiles: Property + + abstract val noManPages: Property + + abstract val endian: Property + + enum class Endian { + LITTLE, + BIG, + NATIVE, + } } diff --git a/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJrePlugin.kt b/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJrePlugin.kt index 8d7a090..e7b0e51 100644 --- a/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJrePlugin.kt +++ b/jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJrePlugin.kt @@ -16,12 +16,22 @@ class JlinkJrePlugin : Plugin { project.pluginManager.apply(JavaPlugin::class.java) val extension = project.extensions.create(JlinkJreExtension.NAME, JlinkJreExtension::class.java).apply { modules.convention(listOf("java.base")) + compress.convention(2) + stripDebug.convention(true) + noHeaderFiles.convention(true) + noManPages.convention(true) + endian.convention(JlinkJreExtension.Endian.NATIVE) } val jlinkJreTask = project.tasks.register(JLINK_JRE_TASK_NAME, JlinkJreTask::class.java) project.tasks.withType(JlinkJreTask::class.java).configureEach { it.modules.set(extension.modules) + it.compress.set(extension.compress) + it.stripDebug.set(extension.stripDebug) + it.noHeaderFiles.set(extension.noHeaderFiles) + it.noManPages.set(extension.noManPages) + it.endian.set(extension.endian) } project.configurations.create("jlinkJre") { diff --git a/jlink-gradle/src/main/kotlin/com/ryandens/jlink/tasks/JlinkJreTask.kt b/jlink-gradle/src/main/kotlin/com/ryandens/jlink/tasks/JlinkJreTask.kt index 172a819..7b99db2 100644 --- a/jlink-gradle/src/main/kotlin/com/ryandens/jlink/tasks/JlinkJreTask.kt +++ b/jlink-gradle/src/main/kotlin/com/ryandens/jlink/tasks/JlinkJreTask.kt @@ -1,5 +1,6 @@ package com.ryandens.jlink.tasks +import com.ryandens.jlink.JlinkJreExtension import org.gradle.api.file.DirectoryProperty import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.provider.ListProperty @@ -20,6 +21,21 @@ abstract class JlinkJreTask : AbstractExecTask { @get:Input abstract val modules: ListProperty + @get:Input + abstract val compress: Property + + @get:Input + abstract val stripDebug: Property + + @get:Input + abstract val noHeaderFiles: Property + + @get:Input + abstract val noManPages: Property + + @get:Input + abstract val endian: Property + @get:InputDirectory abstract val modulePath: DirectoryProperty @@ -47,7 +63,38 @@ abstract class JlinkJreTask : AbstractExecTask { setExecutable(javaCompiler.get().metadata.installationPath.file("bin/jlink")) val jlinkOutput = outputDirectory.dir("jre").get().asFile jlinkOutput.deleteRecursively() // jlink expects the output directory to not exist when it runs - setArgs(listOf("--module-path", modulePath.get().asFile.absolutePath, "--add-modules", modules.get().joinToString(","), "--output", jlinkOutput.absolutePath)) + + args = buildList { + addAll( + listOf( + "--module-path", + modulePath.get().asFile.absolutePath, + "--add-modules", + modules.get().joinToString(","), + "--compress", + "${compress.get()}", + "--output", + jlinkOutput.absolutePath, + ), + ) + + if (stripDebug.get()) { + add("--strip-debug") + } + + if (noHeaderFiles.get()) { + add("--no-header-files") + } + + if (noManPages.get()) { + add("--no-man-pages") + } + + if (endian.get() != JlinkJreExtension.Endian.NATIVE) { + add("--endian") + add(endian.get().toString().lowercase()) + } + } super.exec() } }