11package com.github.jengelman.gradle.plugins.shadow
22
3+ import com.github.jengelman.gradle.plugins.shadow.ShadowApplicationPlugin.Companion.SHADOW_RUN_TASK_NAME
34import com.github.jengelman.gradle.plugins.shadow.internal.isAtLeastKgpVersion
45import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.SHADOW_JAR_TASK_NAME
56import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.registerShadowJarCommon
7+ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar.Companion.shadowJar
68import org.gradle.api.Plugin
79import org.gradle.api.Project
10+ import org.gradle.api.plugins.ApplicationPlugin
11+ import org.gradle.api.tasks.JavaExec
812import org.gradle.api.tasks.bundling.Jar
913import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
1014import 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