Merge branch '1.5.x'

pull/8230/merge
Andy Wilkinson 8 years ago
commit c14a550632

@ -18,6 +18,7 @@ package org.springframework.boot.gradle.repackage;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
@ -50,6 +51,8 @@ class ProjectLibraries implements Libraries {
private final boolean excludeDevtools;
private final TargetConfigurationResolver targetConfigurationResolver;
private String providedConfigurationName = "providedRuntime";
private String customConfigurationName = null;
@ -65,6 +68,17 @@ class ProjectLibraries implements Libraries {
this.project = project;
this.extension = extension;
this.excludeDevtools = excludeDevTools;
this.targetConfigurationResolver = createTargetConfigurationResolver();
}
private static TargetConfigurationResolver createTargetConfigurationResolver() {
try {
return new Gradle3TargetConfigurationResolver(
ProjectDependency.class.getMethod("getTargetConfiguration"));
}
catch (Exception ex) {
return new Gradle2TargetConfigurationResolver();
}
}
/**
@ -127,11 +141,11 @@ class ProjectLibraries implements Libraries {
}
else if (dependency instanceof ProjectDependency) {
ProjectDependency projectDependency = (ProjectDependency) dependency;
Configuration dependencyConfiguration = projectDependency
.getDependencyProject().getConfigurations()
.getByName(projectDependency.getConfiguration());
libraries.addAll(
getLibrariesForFileDependencies(dependencyConfiguration, scope));
libraries
.addAll(getLibrariesForFileDependencies(
this.targetConfigurationResolver
.resolveTargetConfiguration(projectDependency),
scope));
}
}
return libraries;
@ -264,4 +278,47 @@ class ProjectLibraries implements Libraries {
}
private interface TargetConfigurationResolver {
Configuration resolveTargetConfiguration(ProjectDependency projectDependency);
}
private static final class Gradle2TargetConfigurationResolver
implements TargetConfigurationResolver {
@Override
public Configuration resolveTargetConfiguration(
ProjectDependency projectDependency) {
return projectDependency.getProjectConfiguration();
}
}
private static final class Gradle3TargetConfigurationResolver
implements TargetConfigurationResolver {
private final Method getTargetConfiguration;
private Gradle3TargetConfigurationResolver(Method getTargetConfiguration) {
this.getTargetConfiguration = getTargetConfiguration;
}
@Override
public Configuration resolveTargetConfiguration(
ProjectDependency projectDependency) {
try {
String configurationName = (String) this.getTargetConfiguration
.invoke(projectDependency);
return projectDependency.getDependencyProject().getConfigurations()
.getByName(configurationName == null
? Dependency.DEFAULT_CONFIGURATION : configurationName);
}
catch (Exception ex) {
throw new RuntimeException("Failed to get target configuration", ex);
}
}
}
}

Loading…
Cancel
Save