From 1b97e8d9213edea0910a259baff9490916870ee1 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Sun, 22 Jun 2014 19:20:51 +0100 Subject: [PATCH] Skip dependency exclusions if groupId is null Fixes gh-1133 --- .../boot/gradle/FlatdirTests.java | 61 +++++++++++++++++++ .../src/test/resources/flatdir.gradle | 29 +++++++++ .../gradle/exclude/ApplyExcludeRules.java | 31 +++++----- 3 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/FlatdirTests.java create mode 100644 spring-boot-integration-tests/src/test/resources/flatdir.gradle diff --git a/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/FlatdirTests.java b/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/FlatdirTests.java new file mode 100644 index 0000000000..91ca921971 --- /dev/null +++ b/spring-boot-integration-tests/src/test/java/org/springframework/boot/gradle/FlatdirTests.java @@ -0,0 +1,61 @@ +/* + * Copyright 2012-2014 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.gradle; + +import java.io.File; + +import org.gradle.tooling.ProjectConnection; +import org.junit.Before; +import org.junit.Test; +import org.springframework.boot.dependency.tools.ManagedDependencies; +import org.springframework.util.FileCopyUtils; +import org.springframework.util.FileSystemUtils; + +/** + * Tests for using the Gradle plugin's support for flat directory repos + * + * @author Dave Syer + */ +public class FlatdirTests { + + private ProjectConnection project; + + private File libs = new File("target/flatdir/lib"); + + private static final String BOOT_VERSION = ManagedDependencies.get().find( + "spring-boot").getVersion(); + + @Before + public void init() { + if (libs.exists()) { + FileSystemUtils.deleteRecursively(libs); + } + } + + @Test + public void flatdir() throws Exception { + project = new ProjectCreator().createProject("flatdir"); + if (!libs.exists()) { + libs.mkdirs(); + } + FileCopyUtils.copy(new File("src/test/resources/foo.jar"), + new File(libs, "foo-1.0.0.jar")); + project.newBuild().forTasks("build").withArguments( + "-PbootVersion=" + BOOT_VERSION, "--stacktrace").run(); + } + +} diff --git a/spring-boot-integration-tests/src/test/resources/flatdir.gradle b/spring-boot-integration-tests/src/test/resources/flatdir.gradle new file mode 100644 index 0000000000..f218889dde --- /dev/null +++ b/spring-boot-integration-tests/src/test/resources/flatdir.gradle @@ -0,0 +1,29 @@ +buildscript { + repositories { + mavenLocal() + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${project.bootVersion}") + } +} + +apply plugin: 'spring-boot' + +group = 'flatdir' +version = '0.0.0' + +run { + main = 'Foo' +} + +jar { + baseName = 'flatdir' +} + +repositories { + flatDir( dirs:'lib' ) +} + +dependencies { + compile ':foo:1.0.0' +} diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/exclude/ApplyExcludeRules.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/exclude/ApplyExcludeRules.java index 5fc88bc213..798e95cdfb 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/exclude/ApplyExcludeRules.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/groovy/org/springframework/boot/gradle/exclude/ApplyExcludeRules.java @@ -49,10 +49,12 @@ public class ApplyExcludeRules implements Action { if (!VersionManagedDependencies.CONFIGURATION.equals(configuration.getName())) { configuration.getIncoming().beforeResolve( new Action() { + @Override public void execute(ResolvableDependencies resolvableDependencies) { resolvableDependencies.getDependencies().all( new Action() { + @Override public void execute(Dependency dependency) { applyExcludeRules(dependency); @@ -70,20 +72,21 @@ public class ApplyExcludeRules implements Action { } private void applyExcludeRules(ModuleDependency dependency) { - ManagedDependencies managedDependencies = versionManagedDependencies - .getManagedDependencies(); - org.springframework.boot.dependency.tools.Dependency managedDependency = managedDependencies - .find(dependency.getGroup(), dependency.getName()); - if (managedDependency != null) { - for (Exclusion exclusion : managedDependency.getExclusions()) { - addExcludeRule(dependency, exclusion); + ManagedDependencies managedDependencies = versionManagedDependencies.getManagedDependencies(); + // flat directory repositories do not have groups + if (dependency.getGroup() != null) { + org.springframework.boot.dependency.tools.Dependency managedDependency = managedDependencies.find( + dependency.getGroup(), dependency.getName()); + if (managedDependency != null) { + for (Exclusion exclusion : managedDependency.getExclusions()) { + addExcludeRule(dependency, exclusion); + } + addImplicitExcludeRules(dependency); + return; } - addImplicitExcludeRules(dependency); - } - else { - logger.debug("No exclusions rules applied for non-managed dependency " - + dependency); } + logger.debug("No exclusions rules applied for non-managed dependency " + + dependency); } private void addExcludeRule(ModuleDependency dependency, Exclusion exclusion) { @@ -106,8 +109,8 @@ public class ApplyExcludeRules implements Action { private boolean isStarter(ModuleDependency dependency) { return (dependency.getGroup() != null - && dependency.getGroup().equals("org.springframework.boot") && dependency - .getName().startsWith("spring-boot-starter")); + && dependency.getGroup().equals("org.springframework.boot") && dependency.getName().startsWith( + "spring-boot-starter")); } }