Skip to content

Commit a717e7b

Browse files
committed
Apply ShadowApplicationPlugin for KMP
1 parent 353aa3d commit a717e7b

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import org.gradle.api.tasks.TaskContainer
1818
import org.gradle.api.tasks.TaskProvider
1919
import org.gradle.api.tasks.application.CreateStartScripts
2020
import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator
21+
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
2122

2223
/**
2324
* A [Plugin] which packages and runs a project as a Java Application using the shadowed jar.
@@ -34,7 +35,6 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
3435
}
3536

3637
protected open fun Project.addRunTask() {
37-
val extension = applicationExtension
3838
tasks.register(SHADOW_RUN_TASK_NAME, JavaExec::class.java) { task ->
3939
task.description = "Runs this project as a JVM application using the shadow jar"
4040
task.group = ApplicationPlugin.APPLICATION_GROUP
@@ -43,9 +43,21 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
4343
i.destinationDir.resolve("lib/${s.archiveFile.get().asFile.name}")
4444
}
4545
task.classpath(jarFile)
46-
task.mainModule.set(extension.mainModule)
47-
task.mainClass.set(extension.mainClass)
48-
task.jvmArguments.convention(provider { extension.applicationDefaultJvmArgs })
46+
47+
if (isKmpApplied) {
48+
extensions.getByType(KotlinMultiplatformExtension::class.java).jvm().binaries {
49+
executable {
50+
task.mainModule.set(mainModule)
51+
task.mainClass.set(mainClass)
52+
task.jvmArguments.convention(applicationDefaultJvmArgs)
53+
}
54+
}
55+
} else {
56+
val extension = applicationExtension
57+
task.mainModule.set(extension.mainModule)
58+
task.mainClass.set(extension.mainClass)
59+
task.jvmArguments.convention(provider { extension.applicationDefaultJvmArgs })
60+
}
4961

5062
task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
5163
task.javaLauncher.convention(javaToolchainService.launcherFor(javaPluginExtension.toolchain))

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ public abstract class ShadowPlugin : Plugin<Project> {
2020
apply(ShadowApplicationPlugin::class.java)
2121
}
2222
withId("org.jetbrains.kotlin.multiplatform") {
23+
isKmpApplied = true
2324
apply(ShadowKmpPlugin::class.java)
25+
apply(ShadowApplicationPlugin::class.java)
2426
}
2527

2628
// Apply the legacy plugin last.
@@ -32,3 +34,6 @@ public abstract class ShadowPlugin : Plugin<Project> {
3234
}
3335
}
3436
}
37+
38+
internal var isKmpApplied: Boolean = false
39+
private set

0 commit comments

Comments
 (0)