From f67dd957b19711c3b6e6962d313df9aa722640d5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 16 Feb 2017 09:40:52 +0000 Subject: [PATCH] Ignore excludeDevtools on extension when it has been set on bootRepackage Previously, bootRepackage's excludeDevtools property would be overridden by the springBoot extension's excludeDevtools property. This prevented devtools from being included by configuring it on the repackaging task. This commit corrects the logic so that the setting on the repackaging task takes priority. It also adds some tests to verify the behaviour. Closes gh-8308 --- .../boot/gradle/RepackagingTests.java | 88 ++++++++++++------- .../src/test/resources/repackage.gradle | 11 ++- .../boot/gradle/repackage/RepackageTask.java | 4 +- 3 files changed, 66 insertions(+), 37 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 8d5ca891aa7..fd4b7e1e548 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; import java.util.jar.JarFile; +import org.gradle.tooling.BuildLauncher; import org.gradle.tooling.ProjectConnection; import org.junit.BeforeClass; import org.junit.Test; @@ -46,24 +47,20 @@ public class RepackagingTests { @Test public void repackagingEnabled() throws IOException { - project.newBuild().forTasks("clean", "build") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", - "-PexcludeDevtools=false") - .run(); + createBuildForTasks("clean", "build") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true").run(); File buildLibs = new File("target/repackage/build/libs"); File repackageFile = new File(buildLibs, "repackage.jar"); assertThat(repackageFile.exists()).isTrue(); assertThat(new File(buildLibs, "repackage.jar.original").exists()).isTrue(); assertThat(new File(buildLibs, "repackage-sources.jar.original").exists()) .isFalse(); - assertThat(isDevToolsJarIncluded(repackageFile)).isTrue(); } @Test public void repackagingDisabled() { - project.newBuild().forTasks("clean", "build") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=false", - "-PexcludeDevtools=false") + createBuildForTasks("clean", "build") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=false") .run(); File buildLibs = new File("target/repackage/build/libs"); assertThat(new File(buildLibs, "repackage.jar").exists()).isTrue(); @@ -74,9 +71,8 @@ public class RepackagingTests { @Test public void repackagingDisabledWithCustomRepackagedJar() { - project.newBuild().forTasks("clean", "build", "customRepackagedJar") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=false", - "-PexcludeDevtools=false") + createBuildForTasks("clean", "build", "customRepackagedJar") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=false") .run(); File buildLibs = new File("target/repackage/build/libs"); assertThat(new File(buildLibs, "repackage.jar").exists()).isTrue(); @@ -91,8 +87,7 @@ public class RepackagingTests { public void repackagingDisabledWithCustomRepackagedJarUsingStringJarTaskReference() { project.newBuild() .forTasks("clean", "build", "customRepackagedJarWithStringReference") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=false", - "-PexcludeDevtools=false") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=false") .run(); File buildLibs = new File("target/repackage/build/libs"); assertThat(new File(buildLibs, "repackage.jar").exists()).isTrue(); @@ -105,10 +100,8 @@ public class RepackagingTests { @Test public void repackagingEnabledWithCustomRepackagedJar() { - project.newBuild().forTasks("clean", "build", "customRepackagedJar") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", - "-PexcludeDevtools=false") - .run(); + createBuildForTasks("clean", "build", "customRepackagedJar") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true").run(); File buildLibs = new File("target/repackage/build/libs"); assertThat(new File(buildLibs, "repackage.jar").exists()).isTrue(); assertThat(new File(buildLibs, "repackage.jar.original").exists()).isTrue(); @@ -122,9 +115,7 @@ public class RepackagingTests { public void repackagingEnableWithCustomRepackagedJarUsingStringJarTaskReference() { project.newBuild() .forTasks("clean", "build", "customRepackagedJarWithStringReference") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", - "-PexcludeDevtools=false") - .run(); + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true").run(); File buildLibs = new File("target/repackage/build/libs"); assertThat(new File(buildLibs, "repackage.jar").exists()).isTrue(); assertThat(new File(buildLibs, "repackage.jar.original").exists()).isTrue(); @@ -138,10 +129,8 @@ public class RepackagingTests { public void repackageWithFileDependency() throws Exception { FileCopyUtils.copy(new File("src/test/resources/foo.jar"), new File("target/repackage/foo.jar")); - project.newBuild().forTasks("clean", "build") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", - "-PexcludeDevtools=false") - .run(); + createBuildForTasks("clean", "build") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true").run(); File buildLibs = new File("target/repackage/build/libs"); JarFile jarFile = new JarFile(new File(buildLibs, "repackage.jar")); assertThat(jarFile.getEntry("BOOT-INF/lib/foo.jar")).isNotNull(); @@ -149,11 +138,9 @@ public class RepackagingTests { } @Test - public void repackagingEnabledExcludeDevtools() throws IOException { - project.newBuild().forTasks("clean", "build") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", - "-PexcludeDevtools=true") - .run(); + public void devtoolsIsExcludedByDefault() throws IOException { + createBuildForTasks("clean", "bootRepackage") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true").run(); File buildLibs = new File("target/repackage/build/libs"); File repackageFile = new File(buildLibs, "repackage.jar"); assertThat(repackageFile.exists()).isTrue(); @@ -164,16 +151,51 @@ public class RepackagingTests { } @Test - public void customRepackagingTaskWithOwnMainClassNameAnNoGlobalMainClassName() { - project.newBuild().forTasks("clean", "customRepackagedJarWithOwnMainClass") + public void devtoolsCanBeIncludedUsingTheExtension() throws IOException { + createBuildForTasks("clean", "bootRepackage") .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", - "-PexcludeDevtools=false", "-PnoMainClass=true") + "-PexcludeDevtoolsOnExtension=false") + .run(); + File buildLibs = new File("target/repackage/build/libs"); + File repackageFile = new File(buildLibs, "repackage.jar"); + assertThat(repackageFile.exists()).isTrue(); + assertThat(new File(buildLibs, "repackage.jar.original").exists()).isTrue(); + assertThat(new File(buildLibs, "repackage-sources.jar.original").exists()) + .isFalse(); + assertThat(isDevToolsJarIncluded(repackageFile)).isTrue(); + } + + @Test + public void devtoolsCanBeIncludedUsingBootRepackage() throws IOException { + createBuildForTasks("clean", "bootRepackage") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", + "-PexcludeDevtoolsOnBootRepackage=false") + .run(); + File buildLibs = new File("target/repackage/build/libs"); + File repackageFile = new File(buildLibs, "repackage.jar"); + assertThat(repackageFile.exists()).isTrue(); + assertThat(new File(buildLibs, "repackage.jar.original").exists()).isTrue(); + assertThat(new File(buildLibs, "repackage-sources.jar.original").exists()) + .isFalse(); + assertThat(isDevToolsJarIncluded(repackageFile)).isTrue(); + } + + @Test + public void customRepackagingTaskWithOwnMainClassNameAnNoGlobalMainClassName() { + createBuildForTasks("clean", "customRepackagedJarWithOwnMainClass") + .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true", + "-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 BuildLauncher createBuildForTasks(String... taskNames) { + return project.newBuild().setStandardError(System.err) + .setStandardOutput(System.out).forTasks(taskNames); + } + 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 455bb0e4438..5851ba39b53 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 @@ -26,10 +26,17 @@ springBoot { if (!project.hasProperty("noMainClass")) { mainClass = 'foo.bar.Baz' } - excludeDevtools = Boolean.valueOf(project.excludeDevtools) + if (project.hasProperty("excludeDevtoolsOnExtension")) { + excludeDevtools = Boolean.valueOf(project.excludeDevtoolsOnExtension) + } } -bootRepackage.enabled = Boolean.valueOf(project.repackage) +bootRepackage { + enabled = Boolean.valueOf(project.repackage) + if (project.hasProperty("excludeDevtoolsOnBootRepackage")) { + excludeDevtools = Boolean.valueOf(project.excludeDevtoolsOnBootRepackage) + } +} task customJar(type: Jar) { archiveName = 'custom.jar' 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 9503925d128..09f54ed7416 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 @@ -145,8 +145,8 @@ public class RepackageTask extends DefaultTask { SpringBootPluginExtension extension = project.getExtensions() .getByType(SpringBootPluginExtension.class); ProjectLibraries libraries = new ProjectLibraries(project, extension, - (this.excludeDevtools != null && this.excludeDevtools) - || extension.isExcludeDevtools()); + this.excludeDevtools == null ? extension.isExcludeDevtools() + : this.excludeDevtools); if (extension.getProvidedConfiguration() != null) { libraries.setProvidedConfigurationName(extension.getProvidedConfiguration()); }