diff --git a/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/MultiProjectRepackagingTests.java b/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/MultiProjectRepackagingTests.java index 37437791369..4d59a522f08 100644 --- a/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/MultiProjectRepackagingTests.java +++ b/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/MultiProjectRepackagingTests.java @@ -17,11 +17,9 @@ package org.springframework.boot.gradle; import java.io.File; -import java.io.IOException; import java.util.jar.JarFile; import org.gradle.tooling.ProjectConnection; -import org.junit.BeforeClass; import org.junit.Test; import org.springframework.boot.dependency.tools.ManagedDependencies; @@ -38,21 +36,31 @@ public class MultiProjectRepackagingTests { private static final String BOOT_VERSION = ManagedDependencies.get() .find("spring-boot").getVersion(); - private static ProjectConnection project; - - @BeforeClass - public static void createProject() throws IOException { - project = new ProjectCreator().createProject("multi-project-repackage"); - } - @Test public void repackageWithTransitiveFileDependency() throws Exception { + ProjectConnection project = new ProjectCreator() + .createProject("multi-project-transitive-file-dependency"); project.newBuild().forTasks("clean", "build") - .withArguments("-PbootVersion=" + BOOT_VERSION, "-Prepackage=true").run(); - File buildLibs = new File("target/multi-project-repackage/main/build/libs"); + .withArguments("-PbootVersion=" + BOOT_VERSION).run(); + File buildLibs = new File( + "target/multi-project-transitive-file-dependency/main/build/libs"); JarFile jarFile = new JarFile(new File(buildLibs, "main.jar")); assertThat(jarFile.getEntry("lib/commons-logging-1.1.3.jar"), notNullValue()); assertThat(jarFile.getEntry("lib/foo.jar"), notNullValue()); jarFile.close(); } + + @Test + public void repackageWithCommonFileDependency() throws Exception { + ProjectConnection project = new ProjectCreator() + .createProject("multi-project-common-file-dependency"); + project.newBuild().forTasks("clean", "build") + .withArguments("-PbootVersion=" + BOOT_VERSION).run(); + File buildLibs = new File( + "target/multi-project-common-file-dependency/build/libs"); + JarFile jarFile = new JarFile(new File(buildLibs, + "multi-project-common-file-dependency.jar")); + assertThat(jarFile.getEntry("lib/foo.jar"), notNullValue()); + jarFile.close(); + } } diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-common-file-dependency/build.gradle b/spring-boot-integration-tests/src/test/resources/multi-project-common-file-dependency/build.gradle new file mode 100644 index 00000000000..cbd9079f600 --- /dev/null +++ b/spring-boot-integration-tests/src/test/resources/multi-project-common-file-dependency/build.gradle @@ -0,0 +1,28 @@ +buildscript { + repositories { + mavenLocal() + } + dependencies { + classpath "org.springframework.boot:spring-boot-gradle-plugin:${project.bootVersion}" + } +} + +subprojects { + apply plugin: 'java' + + dependencies { + compile rootProject.files {'lib/foo.jar'} + } +} + +apply plugin: 'spring-boot' + +springBoot { + mainClass = 'foo.bar.Baz' +} + +dependencies { + compile project(':one') + compile project(':two') +} + diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-common-file-dependency/settings.gradle b/spring-boot-integration-tests/src/test/resources/multi-project-common-file-dependency/settings.gradle new file mode 100644 index 00000000000..9ae3a92d296 --- /dev/null +++ b/spring-boot-integration-tests/src/test/resources/multi-project-common-file-dependency/settings.gradle @@ -0,0 +1,3 @@ + +include 'one' +include 'two' \ No newline at end of file diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-repackage/build.gradle b/spring-boot-integration-tests/src/test/resources/multi-project-transitive-file-dependency/build.gradle similarity index 100% rename from spring-boot-integration-tests/src/test/resources/multi-project-repackage/build.gradle rename to spring-boot-integration-tests/src/test/resources/multi-project-transitive-file-dependency/build.gradle diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-repackage/common/lib/foo.jar b/spring-boot-integration-tests/src/test/resources/multi-project-transitive-file-dependency/common/lib/foo.jar similarity index 100% rename from spring-boot-integration-tests/src/test/resources/multi-project-repackage/common/lib/foo.jar rename to spring-boot-integration-tests/src/test/resources/multi-project-transitive-file-dependency/common/lib/foo.jar diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-repackage/settings.gradle b/spring-boot-integration-tests/src/test/resources/multi-project-transitive-file-dependency/settings.gradle similarity index 100% rename from spring-boot-integration-tests/src/test/resources/multi-project-repackage/settings.gradle rename to spring-boot-integration-tests/src/test/resources/multi-project-transitive-file-dependency/settings.gradle diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/ProjectLibraries.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/ProjectLibraries.java index 1a3e28e1b10..118538a821a 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/ProjectLibraries.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/ProjectLibraries.java @@ -199,6 +199,23 @@ class ProjectLibraries implements Libraries { return name; } + @Override + public int hashCode() { + return getFile().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof GradleLibrary) { + return getFile().equals(((GradleLibrary) obj).getFile()); + } + return false; + } + + @Override + public String toString() { + return getFile().getAbsolutePath(); + } } /**