@@ -18,6 +18,7 @@ import org.gradle.api.tasks.TaskContainer
18
18
import org.gradle.api.tasks.TaskProvider
19
19
import org.gradle.api.tasks.application.CreateStartScripts
20
20
import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator
21
+ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
21
22
22
23
/* *
23
24
* 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> {
34
35
}
35
36
36
37
protected open fun Project.addRunTask () {
37
- val extension = applicationExtension
38
38
tasks.register(SHADOW_RUN_TASK_NAME , JavaExec ::class .java) { task ->
39
39
task.description = " Runs this project as a JVM application using the shadow jar"
40
40
task.group = ApplicationPlugin .APPLICATION_GROUP
@@ -43,17 +43,28 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
43
43
i.destinationDir.resolve(" lib/${s.archiveFile.get().asFile.name} " )
44
44
}
45
45
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
+ }
49
61
50
62
task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
51
63
task.javaLauncher.convention(javaToolchainService.launcherFor(javaPluginExtension.toolchain))
52
64
}
53
65
}
54
66
55
67
protected open fun Project.addCreateScriptsTask () {
56
- val extension = applicationExtension
57
68
tasks.register(SHADOW_SCRIPTS_TASK_NAME , CreateStartScripts ::class .java) { task ->
58
69
task.description = " Creates OS specific scripts to run the project as a JVM application using the shadow jar"
59
70
task.group = ApplicationPlugin .APPLICATION_GROUP
@@ -65,12 +76,27 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
65
76
resources.text.fromString(requireResourceAsText(" $dir /windowsStartScript.txt" ))
66
77
67
78
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
+
74
100
task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
75
101
}
76
102
}
0 commit comments