Skip to content

Commit

Permalink
Merge pull request #612 from nhumblot/609_support_application_mainClass
Browse files Browse the repository at this point in the history
#609 Support application mainClass property as fallback of mainClassName
  • Loading branch information
johnrengelman committed Feb 21, 2021
2 parents b3677a2 + 53dc1bd commit 7b68fdc
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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.tasks.Sync
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.application.CreateStartScripts
Expand Down Expand Up @@ -54,7 +55,7 @@ class ShadowApplicationPlugin implements Plugin<Project> {
}

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 {
Expand All @@ -63,6 +64,15 @@ class ShadowApplicationPlugin implements Plugin<Project> {
}
}

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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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('\\\\', '\\\\\\\\')
}
Expand Down

0 comments on commit 7b68fdc

Please sign in to comment.