Commit c14a5506 authored by Andy Wilkinson's avatar Andy Wilkinson

Merge branch '1.5.x'

parents fbf493b1 b931f564
...@@ -18,6 +18,7 @@ package org.springframework.boot.gradle.repackage; ...@@ -18,6 +18,7 @@ package org.springframework.boot.gradle.repackage;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.Set; import java.util.Set;
...@@ -50,6 +51,8 @@ class ProjectLibraries implements Libraries { ...@@ -50,6 +51,8 @@ class ProjectLibraries implements Libraries {
private final boolean excludeDevtools; private final boolean excludeDevtools;
private final TargetConfigurationResolver targetConfigurationResolver;
private String providedConfigurationName = "providedRuntime"; private String providedConfigurationName = "providedRuntime";
private String customConfigurationName = null; private String customConfigurationName = null;
...@@ -65,6 +68,17 @@ class ProjectLibraries implements Libraries { ...@@ -65,6 +68,17 @@ class ProjectLibraries implements Libraries {
this.project = project; this.project = project;
this.extension = extension; this.extension = extension;
this.excludeDevtools = excludeDevTools; 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 { ...@@ -127,11 +141,11 @@ class ProjectLibraries implements Libraries {
} }
else if (dependency instanceof ProjectDependency) { else if (dependency instanceof ProjectDependency) {
ProjectDependency projectDependency = (ProjectDependency) dependency; ProjectDependency projectDependency = (ProjectDependency) dependency;
Configuration dependencyConfiguration = projectDependency libraries
.getDependencyProject().getConfigurations() .addAll(getLibrariesForFileDependencies(
.getByName(projectDependency.getConfiguration()); this.targetConfigurationResolver
libraries.addAll( .resolveTargetConfiguration(projectDependency),
getLibrariesForFileDependencies(dependencyConfiguration, scope)); scope));
} }
} }
return libraries; return libraries;
...@@ -264,4 +278,47 @@ class ProjectLibraries implements 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);
}
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment