Skip to content

Commit 4451b25

Browse files
committed
Register runShadow in afterEvaluate
1 parent 2b6a791 commit 4451b25

File tree

3 files changed

+31
-27
lines changed

3 files changed

+31
-27
lines changed

src/functionalTest/kotlin/com/github/jengelman/gradle/plugins/shadow/KotlinPluginsTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ class KotlinPluginsTest : BasePluginTest() {
292292
""".trimIndent(),
293293
)
294294

295-
val result = run(runShadowPath)
295+
val result = run(runShadowPath, "--args='foo'")
296296

297297
assertThat(result.output).contains(
298298
"Hello, World! (foo) from Main",

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.github.jengelman.gradle.plugins.shadow.internal.javaPluginExtension
88
import com.github.jengelman.gradle.plugins.shadow.internal.javaToolchainService
99
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.shadowJar
1010
import java.io.IOException
11+
import org.gradle.api.Action
1112
import org.gradle.api.GradleException
1213
import org.gradle.api.Plugin
1314
import org.gradle.api.Project
@@ -35,12 +36,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
3536
}
3637

3738
protected open fun Project.addRunTask() {
38-
tasks.register(SHADOW_RUN_TASK_NAME, JavaExec::class.java) { task ->
39-
task.description = "Runs this project as a JVM application using the shadow jar"
40-
task.group = ApplicationPlugin.APPLICATION_GROUP
41-
42-
task.classpath = files(tasks.shadowJar)
43-
39+
registerRunShadowCommon { task ->
4440
with(applicationExtension) {
4541
task.mainModule.convention(mainModule)
4642
task.mainClass.convention(mainClass)
@@ -138,5 +134,16 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
138134
@get:JvmSynthetic
139135
public inline val TaskContainer.installShadowDist: TaskProvider<Sync>
140136
get() = named(SHADOW_INSTALL_TASK_NAME, Sync::class.java)
137+
138+
internal fun Project.registerRunShadowCommon(
139+
action: Action<JavaExec>,
140+
): TaskProvider<JavaExec> {
141+
return tasks.register(SHADOW_RUN_TASK_NAME, JavaExec::class.java) { task ->
142+
task.description = "Runs this project as a JVM application using the shadow jar"
143+
task.group = ApplicationPlugin.APPLICATION_GROUP
144+
task.classpath = files(tasks.shadowJar)
145+
action.execute(task)
146+
}
147+
}
141148
}
142149
}

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

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package com.github.jengelman.gradle.plugins.shadow
22

3-
import com.github.jengelman.gradle.plugins.shadow.ShadowApplicationPlugin.Companion.SHADOW_RUN_TASK_NAME
3+
import com.github.jengelman.gradle.plugins.shadow.ShadowApplicationPlugin.Companion.registerRunShadowCommon
44
import com.github.jengelman.gradle.plugins.shadow.internal.isAtLeastKgpVersion
55
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.SHADOW_JAR_TASK_NAME
66
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.registerShadowJarCommon
7-
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.shadowJar
87
import org.gradle.api.Plugin
98
import org.gradle.api.Project
10-
import org.gradle.api.plugins.ApplicationPlugin
119
import org.gradle.api.tasks.JavaExec
1210
import org.gradle.api.tasks.bundling.Jar
1311
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
@@ -27,7 +25,14 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
2725
}
2826

2927
configureShadowJar(target)
30-
addRunTask(target)
28+
}
29+
30+
// TODO: https://youtrack.jetbrains.com/issue/KT-77499
31+
afterEvaluate {
32+
if (!isAtLeastKgpVersion(2, 1, 20)) return@afterEvaluate
33+
@Suppress("EagerGradleConfiguration") // TODO: https://issuetracker.google.com/issues/444825893
34+
val runJvmTask = tasks.findByName("runJvm") as? JavaExec ?: return@afterEvaluate
35+
addRunTask(runJvmTask)
3136
}
3237
}
3338

@@ -50,22 +55,14 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
5055
}
5156
}
5257

53-
private fun Project.addRunTask(target: KotlinJvmTarget) {
54-
if (!isAtLeastKgpVersion(2, 1, 20)) return
55-
56-
tasks.register(SHADOW_RUN_TASK_NAME, JavaExec::class.java) { task ->
57-
task.description = "Runs this project as a JVM application using the shadow jar"
58-
task.group = ApplicationPlugin.APPLICATION_GROUP
59-
60-
task.classpath = files(tasks.shadowJar)
61-
62-
@OptIn(ExperimentalKotlinGradlePluginApi::class)
63-
target.binaries {
64-
executable { dsl ->
65-
task.mainModule.set(dsl.mainModule)
66-
task.mainClass.set(dsl.mainClass)
67-
task.jvmArguments.convention(dsl.applicationDefaultJvmArgs)
68-
}
58+
private fun Project.addRunTask(runJvmTask: JavaExec) {
59+
registerRunShadowCommon { task ->
60+
with(runJvmTask) {
61+
task.mainModule.convention(mainModule)
62+
task.mainClass.convention(mainClass)
63+
task.jvmArguments.convention(jvmArguments)
64+
task.modularity.inferModulePath.convention(modularity.inferModulePath)
65+
task.javaLauncher.convention(javaLauncher)
6966
}
7067
}
7168
}

0 commit comments

Comments
 (0)