From 652bc5403674a399e25d2e4f1b5b5ed6ebe08689 Mon Sep 17 00:00:00 2001 From: Nicolas Humblot Date: Sun, 8 Nov 2020 15:13:51 +0100 Subject: [PATCH] #609 Support application mainClass property as fallback of mainClassName --- .../shadow/ShadowApplicationPlugin.groovy | 12 +++++- .../plugins/shadow/ShadowPluginSpec.groovy | 42 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy index 545fe1969..b8259ae77 100644 --- a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy +++ b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy @@ -10,6 +10,7 @@ import org.gradle.api.distribution.DistributionContainer import org.gradle.api.file.CopySpec import org.gradle.api.plugins.ApplicationPlugin import org.gradle.api.plugins.ApplicationPluginConvention +import org.gradle.api.plugins.JavaApplication import org.gradle.api.plugins.MavenPlugin import org.gradle.api.tasks.Sync import org.gradle.api.tasks.TaskProvider @@ -55,7 +56,7 @@ class ShadowApplicationPlugin implements Plugin { } protected void configureJarMainClass(Project project) { - def classNameProvider = project.provider { project.convention.plugins.application.mainClassName } + def classNameProvider = project.provider { getMainClassName() } jar.configure { jar -> jar.inputs.property('mainClassName', classNameProvider) jar.doFirst { @@ -64,6 +65,15 @@ class ShadowApplicationPlugin implements Plugin { } } + private Object getMainClassName() { + def mainClassName = project.convention.plugins.application.mainClassName + if (Objects.nonNull(mainClassName)) { + return mainClassName + } + + return project.extensions.getByType(JavaApplication.class).mainClass.get() + } + protected void addRunTask(Project project) { ApplicationPluginConvention pluginConvention = ( ApplicationPluginConvention) project.convention.plugins.application diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy index 966cf2de7..26d01e0e8 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy @@ -1205,6 +1205,48 @@ class ShadowPluginSpec extends PluginSpecification { assert result.output.contains('TestApp: Hello World! (foo)') } + @Issue("https://github.com/johnrengelman/shadow/issues/609") + def "doesn't error when using application mainClass property"() { + given: + buildFile.text = defaultBuildScript + + buildFile << """ + project.ext { + aspectjVersion = '1.8.12' + } + + apply plugin: 'application' + + application { + mainClass.set('myapp.Main') + } + + repositories { + jcenter() + } + + runShadow { + args 'foo' + } + + """ + + file('src/main/java/myapp/Main.java') << """ + package myapp; + public class Main { + public static void main(String[] args) { + System.out.println("TestApp: Hello World! (" + args[0] + ")"); + } + } + """.stripIndent() + + when: + BuildResult result = runner.withArguments('runShadow', '--stacktrace').build() + + then: 'tests that runShadow executed and exited' + assert result.output.contains('TestApp: Hello World! (foo)') + } + private String escapedPath(File file) { file.path.replaceAll('\\\\', '\\\\\\\\') }