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
This commit is contained in:
Andy Wilkinson 2017-02-16 09:40:52 +00:00
parent f57ddff478
commit f67dd957b1
3 changed files with 66 additions and 37 deletions

View File

@ -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 {

View File

@ -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'

View File

@ -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());
}