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 d52cf179fc..8d5ca891aa 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 @@ -163,6 +163,17 @@ public class RepackagingTests { assertThat(isDevToolsJarIncluded(repackageFile)).isFalse(); } + @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"); + assertThat(new File(buildLibs, "custom.jar").exists()).isTrue(); + assertThat(new File(buildLibs, "custom.jar.original").exists()).isTrue(); + } + 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 0e281f4462..9a7f4d255b 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 258571f0b1..92d99dbf35 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 @@ -254,8 +254,13 @@ public class RepackageTask extends DefaultTask { .property("main"); } } - getLogger().info("Setting mainClass: " + mainClassName); - repackager.setMainClass(mainClassName); + if (mainClassName != null) { + getLogger().info("Setting mainClass: " + mainClassName); + repackager.setMainClass(mainClassName); + } + else { + getLogger().info("No mainClass configured"); + } } private String getMainClassNameProperty() { @@ -264,7 +269,10 @@ public class RepackageTask extends DefaultTask { } ExtraPropertiesExtension extraProperties = (ExtraPropertiesExtension) getProject() .getExtensions().getByName("ext"); - return (String) extraProperties.get("mainClassName"); + if (extraProperties.has("mainClassName")) { + return (String) extraProperties.get("mainClassName"); + } + return null; } private LaunchScript getLaunchScript() throws IOException {