Skip to content

Commit d84c07f

Browse files
committed
Patch and test binaries.executable
1 parent c2cd2ce commit d84c07f

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,38 @@ class KotlinPluginsTest : BasePluginTest() {
268268
)
269269
}
270270

271+
@Test
272+
fun compatKmpApplicationDsl() {
273+
writeClass(sourceSet = "jvmMain", withImports = true, jvmLang = JvmLang.Kotlin)
274+
projectScript.appendText(
275+
"""
276+
kotlin {
277+
jvm {
278+
binaries {
279+
executable {
280+
it.mainClass.set('my.Main')
281+
}
282+
}
283+
}
284+
sourceSets {
285+
jvmMain {
286+
dependencies {
287+
implementation 'junit:junit:3.8.2'
288+
}
289+
}
290+
}
291+
}
292+
""".trimIndent(),
293+
)
294+
295+
val result = run(runShadowPath)
296+
297+
assertThat(result.output).contains(
298+
"Hello, World! (foo) from Main",
299+
"Refs: junit.framework.Test",
300+
)
301+
}
302+
271303
private fun compileOnlyStdlib(exclude: Boolean): String {
272304
return if (exclude) {
273305
// Disable the stdlib dependency added via `implementation`.

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.github.jengelman.gradle.plugins.shadow
22

3+
import com.github.jengelman.gradle.plugins.shadow.ShadowApplicationPlugin.Companion.SHADOW_RUN_TASK_NAME
34
import com.github.jengelman.gradle.plugins.shadow.internal.isAtLeastKgpVersion
45
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.SHADOW_JAR_TASK_NAME
56
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.registerShadowJarCommon
7+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.shadowJar
68
import org.gradle.api.Plugin
79
import org.gradle.api.Project
10+
import org.gradle.api.plugins.ApplicationPlugin
11+
import org.gradle.api.tasks.JavaExec
812
import org.gradle.api.tasks.bundling.Jar
913
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
1014
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
@@ -23,6 +27,7 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
2327
}
2428

2529
configureShadowJar(target)
30+
addRunTask(target)
2631
}
2732
}
2833

@@ -44,4 +49,24 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
4449
}
4550
}
4651
}
52+
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+
}
69+
}
70+
}
71+
}
4772
}

0 commit comments

Comments
 (0)