Skip to content

Commit eb04b4e

Browse files
committed
chore: fix multiplatform shadowJar compatibility and misc changes
1 parent b629989 commit eb04b4e

File tree

4 files changed

+46
-50
lines changed

4 files changed

+46
-50
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ kotlinx-benchmark = "0.4.13"
3939
kotlinx-fuzz = "0.2.2"
4040
kotlinx-metadata = "0.9.0"
4141
kotlinx-reflect-lite = "1.1.0"
42-
kotlin-wrappers = "2025.3.4"
42+
kotlin-wrappers = "2025.3.5"
4343
kotlin-redacted = "1.12.1"
4444
kotlin-serviceloader = "0.0.15"
4545
kotlinx-multik = "0.2.3"

plugins/project/src/main/kotlin/common/ProjectExtns.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import com.google.devtools.ksp.gradle.KspAATask
66
import java.io.ByteArrayOutputStream
77
import java.io.File
88
import java.nio.file.Path
9+
import java.time.ZonedDateTime
10+
import java.time.format.DateTimeFormatter
11+
import java.util.jar.Attributes
912
import org.graalvm.buildtools.gradle.dsl.GraalVMExtension
1013
import org.gradle.accessors.dm.LibrariesForLibs
1114
import org.gradle.api.Action
@@ -101,6 +104,27 @@ val Project.toolchainVendor
101104
val Project.addModules
102105
get() = libs.versions.java.addModules.get()
103106

107+
val Project.isAutomaticModuleEnabled
108+
get() = gradleBooleanProperty("java.automatic.module.enabled").get()
109+
110+
val Project.defaultJarManifest
111+
get() = buildMap {
112+
put("Enable-Native-Access", "ALL-UNNAMED")
113+
put("Built-By", System.getProperty("user.name"))
114+
put("Built-Jdk", System.getProperty("java.runtime.version"))
115+
put(
116+
"Built-OS",
117+
"${System.getProperty("os.name")} ${System.getProperty("os.arch")} ${System.getProperty("os.version")}")
118+
put("Build-Timestamp", DateTimeFormatter.ISO_INSTANT.format(ZonedDateTime.now()))
119+
put("Created-By", "Gradle ${gradle.gradleVersion}")
120+
put(Attributes.Name.IMPLEMENTATION_TITLE.toString(), project.name)
121+
put(Attributes.Name.IMPLEMENTATION_VERSION.toString(), project.version)
122+
put(Attributes.Name.IMPLEMENTATION_VENDOR.toString(), project.group)
123+
if (isAutomaticModuleEnabled) {
124+
put("Automatic-Module-Name", project.group)
125+
}
126+
}
127+
104128
/** Kotlin version properties. */
105129
val Project.kotlinVersion
106130
get() = libs.versions.kotlin.asProvider()

plugins/project/src/main/kotlin/dev.suresh.plugin.kotlin.jvm.gradle.kts

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import com.javiersc.kotlin.kopy.args.KopyFunctions
55
import common.*
66
import java.io.PrintWriter
77
import java.io.StringWriter
8-
import java.time.ZonedDateTime
9-
import java.time.format.DateTimeFormatter
10-
import java.util.jar.Attributes
118
import java.util.spi.ToolProvider
129
import kotlinx.validation.*
1310
import org.gradle.internal.os.OperatingSystem
@@ -108,21 +105,7 @@ tasks {
108105
withType<KspAATask>().configureEach { configureKspConfig() }
109106

110107
withType<Jar>().configureEach {
111-
manifest {
112-
attributes(
113-
// "Automatic-Module-Name" to project.group,
114-
"Enable-Native-Access" to "ALL-UNNAMED",
115-
"Built-By" to System.getProperty("user.name"),
116-
"Built-Jdk" to System.getProperty("java.runtime.version"),
117-
"Built-OS" to
118-
"${System.getProperty("os.name")} ${System.getProperty("os.arch")} ${System.getProperty("os.version")}",
119-
"Build-Timestamp" to DateTimeFormatter.ISO_INSTANT.format(ZonedDateTime.now()),
120-
"Created-By" to "Gradle ${gradle.gradleVersion}",
121-
Attributes.Name.IMPLEMENTATION_TITLE.toString() to project.name,
122-
Attributes.Name.IMPLEMENTATION_VERSION.toString() to project.version,
123-
Attributes.Name.IMPLEMENTATION_VENDOR.toString() to project.group,
124-
)
125-
}
108+
manifest { attributes(defaultJarManifest) }
126109
duplicatesStrategy = DuplicatesStrategy.INCLUDE
127110
}
128111

plugins/project/src/main/kotlin/dev.suresh.plugin.kotlin.mpp.gradle.kts

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
55
import com.google.devtools.ksp.gradle.KspAATask
66
import com.javiersc.kotlin.kopy.args.KopyFunctions
77
import common.*
8-
import java.time.ZonedDateTime
9-
import java.time.format.DateTimeFormatter
108
import java.util.jar.Attributes
119
import kotlinx.validation.*
1210
import org.gradle.internal.os.OperatingSystem
@@ -98,21 +96,7 @@ tasks {
9896
// withType<Kotlin2JsCompile>().configureEach {}
9997

10098
withType<Jar>().configureEach {
101-
manifest {
102-
attributes(
103-
// "Automatic-Module-Name" to project.group,
104-
"Enable-Native-Access" to "ALL-UNNAMED",
105-
"Built-By" to System.getProperty("user.name"),
106-
"Built-Jdk" to System.getProperty("java.runtime.version"),
107-
"Built-OS" to
108-
"${System.getProperty("os.name")} ${System.getProperty("os.arch")} ${System.getProperty("os.version")}",
109-
"Build-Timestamp" to DateTimeFormatter.ISO_INSTANT.format(ZonedDateTime.now()),
110-
"Created-By" to "Gradle ${gradle.gradleVersion}",
111-
Attributes.Name.IMPLEMENTATION_TITLE.toString() to project.name,
112-
Attributes.Name.IMPLEMENTATION_VERSION.toString() to project.version,
113-
Attributes.Name.IMPLEMENTATION_VENDOR.toString() to project.group,
114-
)
115-
}
99+
manifest { attributes(defaultJarManifest) }
116100
duplicatesStrategy = DuplicatesStrategy.INCLUDE
117101
}
118102

@@ -137,32 +121,37 @@ tasks {
137121
}
138122

139123
pluginManager.withPlugin("com.gradleup.shadow") {
140-
// Register a shadowJar task for the default jvm target
141-
val shadowJvmJar by
142-
registering(ShadowJar::class) {
143-
val main by kotlin.jvm().compilations
144-
// allOutputs == classes + resources
145-
from(main.output.allOutputs)
146-
val runtimeDepConfig =
147-
project.configurations.getByName(main.runtimeDependencyConfigurationName)
148-
configurations = listOf(runtimeDepConfig)
149-
archiveClassifier = "all"
150-
mergeServiceFiles()
124+
val shadowJar by
125+
existing(ShadowJar::class) {
126+
// https://gradleup.com/shadow/kmp-plugin/
151127
manifest {
152128
attributes[Attributes.Name.MAIN_CLASS.toString()] = libs.versions.app.mainclass
153129
}
154-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
155130
}
156131

157132
val buildExecutable by
158133
registering(ReallyExecJar::class) {
159-
jarFile = shadowJvmJar.flatMap { it.archiveFile }
134+
jarFile = shadowJar.flatMap { it.archiveFile }
160135
javaOpts = jvmRunArgs
161136
execJarFile = layout.buildDirectory.dir("libs").map { it.file("${project.name}-app") }
162137
onlyIf { OperatingSystem.current().isUnix }
163138
}
164139

165140
build { finalizedBy(buildExecutable) }
141+
142+
// Shows how to register a shadowJar task for the default jvm target
143+
register<ShadowJar>("shadowJvmJar") {
144+
val main by kotlin.jvm().compilations
145+
// allOutputs == classes + resources
146+
from(main.output.allOutputs)
147+
val runtimeDepConfig =
148+
project.configurations.getByName(main.runtimeDependencyConfigurationName)
149+
configurations = listOf(runtimeDepConfig)
150+
archiveClassifier = "jvm-all"
151+
mergeServiceFiles()
152+
manifest { attributes[Attributes.Name.MAIN_CLASS.toString()] = libs.versions.app.mainclass }
153+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
154+
}
166155
}
167156

168157
pluginManager.withPlugin("org.jetbrains.kotlinx.binary-compatibility-validator") {
@@ -174,7 +163,7 @@ tasks {
174163
}
175164

176165
withType<KotlinApiBuildTask>().configureEach {
177-
// inputJar = named<Jar>("shadowJvmJar").flatMap { it.archiveFile }
166+
// inputJar = named<Jar>("shadowJar").flatMap { it.archiveFile }
178167
}
179168
}
180169
}

0 commit comments

Comments
 (0)