Skip to content

Commit 60b9281

Browse files
committed
Register startShadowScripts from startScriptsForJvm
1 parent 75a91d4 commit 60b9281

File tree

2 files changed

+47
-8
lines changed

2 files changed

+47
-8
lines changed

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
4848
}
4949

5050
protected open fun Project.addCreateScriptsTask() {
51-
tasks.register(SHADOW_SCRIPTS_TASK_NAME, CreateStartScripts::class.java) { task ->
52-
task.description = "Creates OS specific scripts to run the project as a JVM application using the shadow jar"
53-
task.group = ApplicationPlugin.APPLICATION_GROUP
54-
55-
task.classpath = files(tasks.shadowJar)
56-
51+
registerStartShadowScriptsCommon { task ->
5752
@Suppress("InternalGradleApiUsage") // Usages of conventionMapping.
5853
with(applicationExtension) {
5954
task.mainModule.convention(mainModule)
@@ -153,5 +148,16 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
153148
action.execute(task)
154149
}
155150
}
151+
152+
internal fun Project.registerStartShadowScriptsCommon(
153+
action: Action<CreateStartScripts>,
154+
): TaskProvider<CreateStartScripts> {
155+
return tasks.register(SHADOW_SCRIPTS_TASK_NAME, CreateStartScripts::class.java) { task ->
156+
task.description = "Creates OS specific scripts to run the project as a JVM application using the shadow jar"
157+
task.group = ApplicationPlugin.APPLICATION_GROUP
158+
task.classpath = files(tasks.shadowJar)
159+
action.execute(task)
160+
}
161+
}
156162
}
157163
}

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowKmpPlugin.kt

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package com.github.jengelman.gradle.plugins.shadow
22

33
import com.github.jengelman.gradle.plugins.shadow.ShadowApplicationPlugin.Companion.registerRunShadowCommon
4+
import com.github.jengelman.gradle.plugins.shadow.ShadowApplicationPlugin.Companion.registerStartShadowScriptsCommon
45
import com.github.jengelman.gradle.plugins.shadow.internal.isAtLeastKgpVersion
56
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.SHADOW_JAR_TASK_NAME
67
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.registerShadowJarCommon
8+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.shadowJar
9+
import java.util.Locale
710
import org.gradle.api.Plugin
811
import org.gradle.api.Project
912
import org.gradle.api.tasks.JavaExec
13+
import org.gradle.api.tasks.application.CreateStartScripts
1014
import org.gradle.api.tasks.bundling.Jar
1115
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
1216
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
@@ -15,6 +19,8 @@ import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
1519
public abstract class ShadowKmpPlugin : Plugin<Project> {
1620

1721
override fun apply(project: Project): Unit = with(project) {
22+
var jvmTarget: KotlinJvmTarget? = null
23+
1824
extensions.getByType(KotlinMultiplatformExtension::class.java).targets.configureEach { target ->
1925
if (target !is KotlinJvmTarget) return@configureEach
2026
@Suppress("EagerGradleConfiguration")
@@ -25,14 +31,24 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
2531
}
2632

2733
configureShadowJar(target)
34+
jvmTarget = target
2835
}
2936

3037
// TODO: https://youtrack.jetbrains.com/issue/KT-77499
3138
afterEvaluate {
3239
if (!isAtLeastKgpVersion(2, 1, 20)) return@afterEvaluate
40+
jvmTarget ?: return@afterEvaluate
41+
val targetNameCap = jvmTarget.targetName.replaceFirstChar { it.titlecase(Locale.US) }
42+
43+
@Suppress("EagerGradleConfiguration") // TODO: https://issuetracker.google.com/issues/444825893
44+
(tasks.findByName("run$targetNameCap") as? JavaExec)?.let {
45+
addRunTask(it)
46+
} ?: return@afterEvaluate
47+
// This task must exist if the runJvmTask exists.
3348
@Suppress("EagerGradleConfiguration") // TODO: https://issuetracker.google.com/issues/444825893
34-
val runJvmTask = tasks.findByName("runJvm") as? JavaExec ?: return@afterEvaluate
35-
addRunTask(runJvmTask)
49+
(tasks.getByName("startScriptsFor$targetNameCap") as CreateStartScripts).let {
50+
addCreateScriptsTask(it)
51+
}
3652
}
3753
}
3854

@@ -56,6 +72,9 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
5672
}
5773

5874
private fun Project.addRunTask(runJvmTask: JavaExec) {
75+
tasks.shadowJar.configure { task ->
76+
task.mainClass.convention(runJvmTask.mainClass)
77+
}
5978
registerRunShadowCommon { task ->
6079
with(runJvmTask) {
6180
task.mainModule.convention(mainModule)
@@ -66,4 +85,18 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
6685
}
6786
}
6887
}
88+
89+
private fun Project.addCreateScriptsTask(startScriptsTask: CreateStartScripts) {
90+
registerStartShadowScriptsCommon { task ->
91+
@Suppress("InternalGradleApiUsage", "DuplicatedCode") // Usages of conventionMapping.
92+
with(startScriptsTask) {
93+
task.mainModule.convention(mainModule)
94+
task.mainClass.convention(mainClass)
95+
task.conventionMapping.map("applicationName", ::getApplicationName)
96+
task.conventionMapping.map("outputDir") { layout.buildDirectory.dir("scriptsShadow").get().asFile }
97+
task.conventionMapping.map("executableDir", ::getExecutableDir)
98+
task.conventionMapping.map("defaultJvmOpts", ::getDefaultJvmOpts)
99+
}
100+
}
101+
}
69102
}

0 commit comments

Comments
 (0)