IDEA-155963 Gradle war 'providedCompile' dependencies not observed since version 2016.1.2

This commit is contained in:
Vladislav.Soroka
2016-05-25 13:00:39 +03:00
parent 63b1ae740d
commit fee33f3d28
2 changed files with 45 additions and 3 deletions
@@ -644,4 +644,41 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
assertModuleLibDepScope("project", "Gradle: junit:junit:4.11", DependencyScope.COMPILE);
assertModuleLibDepScope("project", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.PROVIDED, DependencyScope.RUNTIME);
}
@Test
@TargetVersions("2.0+")
public void testProvidedTransitiveDependencies() throws Exception {
createSettingsFile("include 'projectA', 'projectB', 'projectC' ");
importProject(
"project(':projectA') {\n" +
" apply plugin: 'java'\n" +
"}\n" +
"project(':projectB') {\n" +
" apply plugin: 'java'\n" +
" dependencies {\n" +
" compile project(':projectA')\n" +
" }\n" +
"}\n" +
"project(':projectC') {\n" +
" apply plugin: 'war'\n" +
" dependencies {\n" +
" providedCompile project(':projectB')\n" +
" }\n" +
"}"
);
assertModules("project", "projectA", "projectA_main", "projectA_test", "projectB", "projectB_main", "projectB_test", "projectC", "projectC_main", "projectC_test");
assertModuleModuleDepScope("projectB_main", "projectA_main", DependencyScope.COMPILE);
assertModuleModuleDepScope("projectC_main", "projectA_main", DependencyScope.PROVIDED);
assertModuleModuleDepScope("projectC_main", "projectB_main", DependencyScope.PROVIDED);
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "projectA", "projectB", "projectC");
assertModuleModuleDepScope("projectB", "projectA", DependencyScope.COMPILE);
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("2.5")) >= 0) {
assertModuleModuleDepScope("projectC", "projectA", DependencyScope.PROVIDED);
}
assertModuleModuleDepScope("projectC", "projectB", DependencyScope.PROVIDED);
}
}
@@ -143,10 +143,15 @@ class DependencyResolverImpl implements DependencyResolver {
Map<ComponentIdentifier, ComponentArtifactsResult> componentResultsMap = [:];
componentResults.each { componentResultsMap.put(it.id, it) }
Multimap<ModuleComponentIdentifier, ProjectDependency> configurationProjectDependencies = ArrayListMultimap.create()
configuration.incoming.dependencies.findAll { it instanceof ProjectDependency }.each {
configurationProjectDependencies.put(toComponentIdentifier(it.group, it.name, it.version), it as ProjectDependency)
def projectDeps
projectDeps = { Configuration conf, map = ArrayListMultimap.create() ->
conf.incoming.dependencies.findAll { it instanceof ProjectDependency }.each { it ->
map.put(toComponentIdentifier(it.group, it.name, it.version), it as ProjectDependency)
projectDeps((it as ProjectDependency).projectConfiguration, map)
}
map
}
Multimap<ModuleComponentIdentifier, ProjectDependency> configurationProjectDependencies = projectDeps(configuration)
ResolutionResult resolutionResult = configuration.incoming.resolutionResult
if(!configuration.resolvedConfiguration.hasError()) {