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 4d59a522f0..2666bc510a 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 @@ -63,4 +63,17 @@ public class MultiProjectRepackagingTests { assertThat(jarFile.getEntry("lib/foo.jar"), notNullValue()); jarFile.close(); } + + @Test + public void repackageWithRuntimeProjectDependency() throws Exception { + ProjectConnection project = new ProjectCreator() + .createProject("multi-project-runtime-project-dependency"); + project.newBuild().forTasks("clean", "build") + .withArguments("-PbootVersion=" + BOOT_VERSION).run(); + File buildLibs = new File( + "target/multi-project-runtime-project-dependency/projectA/build/libs"); + JarFile jarFile = new JarFile(new File(buildLibs, "projectA.jar")); + assertThat(jarFile.getEntry("lib/projectB.jar"), notNullValue()); + jarFile.close(); + } } diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-runtime-project-dependency/build.gradle b/spring-boot-integration-tests/src/test/resources/multi-project-runtime-project-dependency/build.gradle new file mode 100644 index 0000000000..53e3dd2755 --- /dev/null +++ b/spring-boot-integration-tests/src/test/resources/multi-project-runtime-project-dependency/build.gradle @@ -0,0 +1,22 @@ +buildscript { + repositories { + mavenLocal() + } + dependencies { + classpath "org.springframework.boot:spring-boot-gradle-plugin:${project.bootVersion}" + } +} + +project(':projectA') { + apply plugin: 'spring-boot' + dependencies { + runtime project(':projectB') + } + bootRepackage { + mainClass 'com.foo.Bar' + } +} + +project(':projectB') { + apply plugin: 'java' +} \ No newline at end of file diff --git a/spring-boot-integration-tests/src/test/resources/multi-project-runtime-project-dependency/settings.gradle b/spring-boot-integration-tests/src/test/resources/multi-project-runtime-project-dependency/settings.gradle new file mode 100644 index 0000000000..ee6b6cd92c --- /dev/null +++ b/spring-boot-integration-tests/src/test/resources/multi-project-runtime-project-dependency/settings.gradle @@ -0,0 +1 @@ +include 'projectA', 'projectB' \ No newline at end of file diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackagePluginFeatures.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackagePluginFeatures.java index 1f5cfe71b2..c4679f64d0 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackagePluginFeatures.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/repackage/RepackagePluginFeatures.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -22,9 +22,12 @@ import java.io.IOException; import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; import org.gradle.api.logging.Logger; import org.gradle.api.plugins.BasePlugin; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.tasks.TaskDependency; import org.gradle.api.tasks.bundling.Jar; import org.springframework.boot.gradle.PluginFeatures; import org.springframework.boot.gradle.SpringBootPluginExtension; @@ -37,6 +40,7 @@ import org.springframework.util.StringUtils; * * @author Phillip Webb * @author Dave Syer + * @author Andy Wilkinson */ public class RepackagePluginFeatures implements PluginFeatures { @@ -55,9 +59,14 @@ public class RepackagePluginFeatures implements PluginFeatures { + "archives so that they can be executed from the command " + "line using 'java -jar'"); task.setGroup(BasePlugin.BUILD_GROUP); - task.dependsOn(project.getConfigurations() - .getByName(Dependency.ARCHIVES_CONFIGURATION).getAllArtifacts() - .getBuildDependencies()); + Configuration runtimeConfiguration = project.getConfigurations().getByName( + JavaPlugin.RUNTIME_CONFIGURATION_NAME); + TaskDependency runtimeProjectDependencyJarTasks = runtimeConfiguration + .getTaskDependencyFromProjectDependency(true, JavaPlugin.JAR_TASK_NAME); + task.dependsOn( + project.getConfigurations().getByName(Dependency.ARCHIVES_CONFIGURATION) + .getAllArtifacts().getBuildDependencies(), + runtimeProjectDependencyJarTasks); registerOutput(project, task); ensureTaskRunsOnAssembly(project, task); } @@ -121,7 +130,7 @@ public class RepackagePluginFeatures implements PluginFeatures { private void setupInputOutputs(Jar jarTask, String classifier) { Logger logger = this.project.getLogger(); logger.debug("Using classifier: " + classifier + " for task " - + task.getName()); + + this.task.getName()); File inputFile = jarTask.getArchivePath(); String outputName = inputFile.getName(); outputName = StringUtils.stripFilenameExtension(outputName) + "-"