@@ -18,6 +18,7 @@ import org.gradle.api.tasks.TaskContainer
1818import org.gradle.api.tasks.TaskProvider
1919import org.gradle.api.tasks.application.CreateStartScripts
2020import 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,17 +43,28 @@ 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))
5264 }
5365 }
5466
5567 protected open fun Project.addCreateScriptsTask () {
56- val extension = applicationExtension
5768 tasks.register(SHADOW_SCRIPTS_TASK_NAME , CreateStartScripts ::class .java) { task ->
5869 task.description = " Creates OS specific scripts to run the project as a JVM application using the shadow jar"
5970 task.group = ApplicationPlugin .APPLICATION_GROUP
@@ -65,12 +76,27 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
6576 resources.text.fromString(requireResourceAsText(" $dir /windowsStartScript.txt" ))
6677
6778 task.classpath = files(tasks.shadowJar)
68- task.mainModule.set(extension.mainModule)
69- task.mainClass.set(extension.mainClass)
70- task.conventionMapping.map(" applicationName" , extension::getApplicationName)
71- task.conventionMapping.map(" outputDir" ) { layout.buildDirectory.dir(" scriptsShadow" ).get().asFile }
72- task.conventionMapping.map(" executableDir" , extension::getExecutableDir)
73- task.conventionMapping.map(" defaultJvmOpts" , extension::getApplicationDefaultJvmArgs)
79+
80+ if (isKmpApplied) {
81+ extensions.getByType(KotlinMultiplatformExtension ::class .java).jvm().binaries {
82+ executable {
83+ task.mainModule.set(mainModule)
84+ task.mainClass.set(mainClass)
85+ task.conventionMapping.map(" applicationName" , ::applicationName)
86+ task.conventionMapping.map(" executableDir" , ::executableDir)
87+ task.conventionMapping.map(" defaultJvmOpts" , ::applicationDefaultJvmArgs)
88+ }
89+ }
90+ } else {
91+ val extension = applicationExtension
92+ task.mainModule.set(extension.mainModule)
93+ task.mainClass.set(extension.mainClass)
94+ task.conventionMapping.map(" applicationName" , extension::getApplicationName)
95+ task.conventionMapping.map(" outputDir" ) { layout.buildDirectory.dir(" scriptsShadow" ).get().asFile }
96+ task.conventionMapping.map(" executableDir" , extension::getExecutableDir)
97+ task.conventionMapping.map(" defaultJvmOpts" , extension::getApplicationDefaultJvmArgs)
98+ }
99+
74100 task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
75101 }
76102 }
0 commit comments