Skip to content

Commit

Permalink
✨ Enable jlink task and plugin to be configured with its
Browse files Browse the repository at this point in the history
command line options. Provide sensible defaults for most users
  • Loading branch information
ryandens committed Feb 21, 2023
1 parent 92d1d61 commit ec78605
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.ryandens.jlink

import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property

abstract class JlinkJreExtension {

Expand All @@ -9,4 +10,20 @@ abstract class JlinkJreExtension {
}

abstract val modules: ListProperty<String>

abstract val compress: Property<Int>

abstract val stripDebug: Property<Boolean>

abstract val noHeaderFiles: Property<Boolean>

abstract val noManPages: Property<Boolean>

abstract val endian: Property<Endian>

enum class Endian {
LITTLE,
BIG,
NATIVE,
}
}
10 changes: 10 additions & 0 deletions jlink-gradle/src/main/kotlin/com/ryandens/jlink/JlinkJrePlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,22 @@ class JlinkJrePlugin : Plugin<Project> {
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") {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -20,6 +21,21 @@ abstract class JlinkJreTask : AbstractExecTask<JlinkJreTask> {
@get:Input
abstract val modules: ListProperty<String>

@get:Input
abstract val compress: Property<Int>

@get:Input
abstract val stripDebug: Property<Boolean>

@get:Input
abstract val noHeaderFiles: Property<Boolean>

@get:Input
abstract val noManPages: Property<Boolean>

@get:Input
abstract val endian: Property<JlinkJreExtension.Endian>

@get:InputDirectory
abstract val modulePath: DirectoryProperty

Expand Down Expand Up @@ -47,7 +63,38 @@ abstract class JlinkJreTask : AbstractExecTask<JlinkJreTask> {
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()
}
}

0 comments on commit ec78605

Please sign in to comment.