From c808de0021578b4b9ba0881a33c9ed20db2465a5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 15 Jun 2016 17:24:00 +0100 Subject: [PATCH] Allow custom repackage task to be used without a global main class Closes gh-5956 --- .../boot/gradle/RepackagingTests.java | 11 +++++++++++ .../src/test/resources/repackage.gradle | 9 ++++++++- .../boot/gradle/repackage/RepackageTask.java | 15 +++++++++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/java/org/springframework/boot/gradle/RepackagingTests.java b/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/java/org/springframework/boot/gradle/RepackagingTests.java index 683a26df098..8cfddd15111 100644 --- a/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/java/org/springframework/boot/gradle/RepackagingTests.java +++ b/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/java/org/springframework/boot/gradle/RepackagingTests.java @@ -159,6 +159,17 @@ public class RepackagingTests { assertFalse(isDevToolsJarIncluded(repackageFile)); } + @Test + public void customRepackagingTaskWithOwnMainClassNameAnNoGlobalMainClassName() { + project.newBuild().forTasks("clean", "customRepackagedJarWithOwnMainClass") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", + "-PexcludeDevtools=false", "-PnoMainClass=true") + .run(); + File buildLibs = new File("target/repackage/build/libs"); + assertTrue(new File(buildLibs, "custom.jar").exists()); + assertTrue(new File(buildLibs, "custom.jar.original").exists()); + } + private boolean isDevToolsJarIncluded(File repackageFile) throws IOException { JarFile jarFile = new JarFile(repackageFile); try { diff --git a/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/resources/repackage.gradle b/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/resources/repackage.gradle index 0e281f44620..9a7f4d255b9 100644 --- a/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/resources/repackage.gradle +++ b/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/resources/repackage.gradle @@ -23,7 +23,9 @@ dependencies { } springBoot { - mainClass = 'foo.bar.Baz' + if (!project.hasProperty("noMainClass")) { + mainClass = 'foo.bar.Baz' + } excludeDevtools = Boolean.valueOf(project.excludeDevtools) } @@ -50,3 +52,8 @@ task customRepackagedJar(type: BootRepackage, dependsOn: customJar) { task customRepackagedJarWithStringReference(type: BootRepackage, dependsOn: customJar) { withJarTask = 'customJar' } + +task customRepackagedJarWithOwnMainClass(type: BootRepackage, dependsOn: customJar) { + withJarTask = customJar + mainClass = 'foo.bar.Baz' +} diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/repackage/RepackageTask.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/repackage/RepackageTask.java index da068e4ca0b..e2b21850d9f 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/repackage/RepackageTask.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/repackage/RepackageTask.java @@ -240,14 +240,16 @@ public class RepackageTask extends DefaultTask { } private void setMainClass(Repackager repackager) { - String mainClass; + String mainClass = null; if (getProject().hasProperty("mainClassName")) { mainClass = (String) getProject().property("mainClassName"); } else { ExtraPropertiesExtension extraProperties = (ExtraPropertiesExtension) getProject() .getExtensions().getByName("ext"); - mainClass = (String) extraProperties.get("mainClassName"); + if (extraProperties.has("mainClassName")) { + mainClass = (String) extraProperties.get("mainClassName"); + } } if (RepackageTask.this.mainClass != null) { mainClass = RepackageTask.this.mainClass; @@ -262,8 +264,13 @@ public class RepackageTask extends DefaultTask { .property("main"); } } - getLogger().info("Setting mainClass: " + mainClass); - repackager.setMainClass(mainClass); + if (mainClass != null) { + getLogger().info("Setting mainClass: " + mainClass); + repackager.setMainClass(mainClass); + } + else { + getLogger().info("No mainClass configured"); + } } private LaunchScript getLaunchScript() throws IOException {