IDEA-167412 Gradle 3.4-rc-1 changes compile dependencies to provided

This commit is contained in:
Vladislav.Soroka
2017-02-02 19:25:58 +03:00
parent 49b5631bd4
commit 4748ad3174
4 changed files with 102 additions and 36 deletions

View File

@@ -336,6 +336,12 @@ public class GradleProjectResolverUtil {
if (prevScope.isForProductionCompile()) continue;
if (prevScope.isForProductionRuntime() && currentScope.isForProductionRuntime()) continue;
// consider dependency that exists in both PROVIDED and RUNTIME scope as COMPILE one
if(prevScope == DependencyScope.PROVIDED && currentScope == DependencyScope.RUNTIME) {
if(seenDependency instanceof AbstractExternalDependency) {
((AbstractExternalDependency)seenDependency).setScope(DependencyScope.COMPILE.name());
}
}
}
dependencyMap.put(new DefaultExternalDependencyId(dependency.getId()), dependency);

View File

@@ -26,6 +26,8 @@ import org.junit.Test;
import java.util.List;
import static com.intellij.util.containers.ContainerUtil.ar;
/**
* @author Vladislav.Soroka
* @since 6/30/2014
@@ -69,8 +71,6 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "api", "impl");
assertModuleModuleDepScope("project", "api", DependencyScope.COMPILE);
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("1.12")) < 0) {
assertModuleModuleDepScope("project", "impl", DependencyScope.RUNTIME);
} else {
@@ -117,11 +117,16 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
assertModuleLibDepScope("project2_main", "Gradle: junit:junit:4.11", DependencyScope.RUNTIME);
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("2.5")) >= 0) {
boolean gradleOlderThen_3_4 = isGradleOlderThen_3_4();
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "project1", "project2");
assertModuleModuleDepScope("project2", "project1", DependencyScope.COMPILE);
assertModuleLibDepScope("project2", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.RUNTIME);
assertModuleLibDepScope("project2", "Gradle: junit:junit:4.11", DependencyScope.RUNTIME);
assertMergedModuleCompileModuleDepScope("project2", "project1");
assertModuleLibDepScope("project2", "Gradle: org.hamcrest:hamcrest-core:1.3",
gradleOlderThen_3_4 ? ar(DependencyScope.RUNTIME)
: ar(DependencyScope.RUNTIME, DependencyScope.TEST));
assertModuleLibDepScope("project2", "Gradle: junit:junit:4.11",
gradleOlderThen_3_4 ? ar(DependencyScope.RUNTIME)
: ar(DependencyScope.RUNTIME, DependencyScope.TEST));
}
}
@@ -253,13 +258,17 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
assertModules("project");
assertModuleLibDep("project", depName, depJar.getUrl());
assertModuleLibDepScope("project", depName, DependencyScope.COMPILE);
assertMergedModuleCompileLibDepScope("project", depName);
assertModuleLibDep("project", "Gradle: dep:dep:1.0:tests", depTestsJar.getUrl());
assertModuleLibDepScope("project", "Gradle: dep:dep:1.0:tests", DependencyScope.TEST);
assertModuleLibDep("project", "Gradle: dep:dep:1.0:someExt", depNonJar.getUrl());
assertModuleLibDepScope("project", "Gradle: dep:dep:1.0:someExt", DependencyScope.RUNTIME);
if (isGradleOlderThen_3_4()) {
assertModuleLibDepScope("project", "Gradle: dep:dep:1.0:someExt", DependencyScope.RUNTIME);
} else {
assertModuleLibDepScope("project", "Gradle: dep:dep:1.0:someExt", DependencyScope.RUNTIME, DependencyScope.TEST);
}
}
@Test
@@ -300,16 +309,25 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
assertModules("project");
assertModuleLibDep("project", depName, depJar.getUrl());
assertModuleLibDepScope("project", depName, DependencyScope.COMPILE);
assertModuleLibDepScope("project", "Gradle: unresolvable-lib-0.1:1", DependencyScope.COMPILE);
assertMergedModuleCompileLibDepScope("project", depName);
assertMergedModuleCompileLibDepScope("project", "Gradle: unresolvable-lib-0.1:1");
unresolvableDep = getModuleLibDeps("project", "Gradle: unresolvable-lib-0.1:1");
assertEquals(1, unresolvableDep.size());
unresolvableEntry = unresolvableDep.iterator().next();
assertTrue(unresolvableEntry.isModuleLevel());
assertEquals(DependencyScope.COMPILE, unresolvableEntry.getScope());
unresolvableEntryUrls = unresolvableEntry.getUrls(OrderRootType.CLASSES);
assertEquals(0, unresolvableEntryUrls.length);
if (isGradleOlderThen_3_4()) {
assertEquals(1, unresolvableDep.size());
unresolvableEntry = unresolvableDep.iterator().next();
assertTrue(unresolvableEntry.isModuleLevel());
assertEquals(DependencyScope.COMPILE, unresolvableEntry.getScope());
unresolvableEntryUrls = unresolvableEntry.getUrls(OrderRootType.CLASSES);
assertEquals(0, unresolvableEntryUrls.length);
}
else {
assertEquals(3, unresolvableDep.size());
unresolvableEntry = unresolvableDep.iterator().next();
assertTrue(unresolvableEntry.isModuleLevel());
unresolvableEntryUrls = unresolvableEntry.getUrls(OrderRootType.CLASSES);
assertEquals(0, unresolvableEntryUrls.length);
}
}
@Test
@@ -449,11 +467,20 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModuleModuleDepScope("project-tests", "project1", DependencyScope.COMPILE);
assertModuleModuleDepScope("project-tests", "project2", DependencyScope.RUNTIME);
assertMergedModuleCompileModuleDepScope("project-tests", "project1");
boolean gradleOlderThen_3_4 = isGradleOlderThen_3_4();
if (gradleOlderThen_3_4) {
assertModuleModuleDepScope("project-tests", "project2", DependencyScope.RUNTIME);
}
else {
assertModuleModuleDepScope("project-tests", "project2", DependencyScope.RUNTIME, DependencyScope.TEST);
}
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("2.0")) > 0) {
assertModuleLibDepScope("project-tests", "Gradle: org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.0", DependencyScope.COMPILE);
assertModuleLibDepScope("project-tests", "Gradle: org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1", DependencyScope.RUNTIME);
assertModuleLibDepScope("project-tests", "Gradle: org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.0",
gradleOlderThen_3_4 ? ar(DependencyScope.COMPILE) : ar(DependencyScope.PROVIDED, DependencyScope.TEST));
assertModuleLibDepScope("project-tests", "Gradle: org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1",
gradleOlderThen_3_4 ? ar(DependencyScope.RUNTIME) : ar(DependencyScope.RUNTIME, DependencyScope.TEST));
}
}
@@ -491,10 +518,10 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "project1", "project2");
assertModuleModuleDeps("project2", "project1");
assertMergedModuleCompileModuleDepScope("project2", "project1");
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("2.0")) > 0) {
assertModuleLibDepScope("project2", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.COMPILE);
assertModuleLibDepScope("project2", "Gradle: junit:junit:4.11", DependencyScope.COMPILE);
assertMergedModuleCompileLibDepScope("project2", "Gradle: org.hamcrest:hamcrest-core:1.3");
assertMergedModuleCompileLibDepScope("project2", "Gradle: junit:junit:4.11");
}
}
@@ -631,7 +658,6 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "project1", "project2");
assertModuleModuleDeps("project2", "project1");
}
@Test
@@ -735,10 +761,9 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "core", "service", "util");
assertModuleModuleDeps("service", "core");
assertModuleModuleDepScope("service", "core", DependencyScope.COMPILE);
assertModuleLibDepScope("service", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.COMPILE);
assertModuleLibDepScope("service", "Gradle: junit:junit:4.11", DependencyScope.COMPILE);
assertMergedModuleCompileModuleDepScope("service", "core");
assertMergedModuleCompileLibDepScope("service", "Gradle: org.hamcrest:hamcrest-core:1.3");
assertMergedModuleCompileLibDepScope("service", "Gradle: junit:junit:4.11");
}
@Test
@@ -803,12 +828,11 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
assertModuleModuleDepScope("app", "modB", DependencyScope.TEST);
assertModuleLibDepScope("app", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.RUNTIME, DependencyScope.TEST);
assertModuleModuleDeps("modA", "modB");
assertModuleModuleDepScope("modA", "modB", DependencyScope.COMPILE);
assertModuleLibDepScope("modA", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.COMPILE);
assertMergedModuleCompileModuleDepScope("modA", "modB");
assertMergedModuleCompileLibDepScope("modA", "Gradle: org.hamcrest:hamcrest-core:1.3");
assertModuleModuleDeps("modB");
assertModuleLibDepScope("modB", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.COMPILE);
assertMergedModuleCompileLibDepScope("modB", "Gradle: org.hamcrest:hamcrest-core:1.3");
}
@Test
@@ -862,8 +886,15 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModules("project");
assertModuleLibDepScope("project", "Gradle: junit:junit:4.11", DependencyScope.COMPILE);
assertModuleLibDepScope("project", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.PROVIDED, DependencyScope.RUNTIME);
assertMergedModuleCompileLibDepScope("project", "Gradle: junit:junit:4.11");
if (isGradleOlderThen_3_4()) {
assertModuleLibDepScope("project", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.PROVIDED, DependencyScope.RUNTIME);
}
else {
assertModuleLibDepScope("project", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.PROVIDED, DependencyScope.RUNTIME,
DependencyScope.TEST);
}
}
@Test
@@ -896,7 +927,7 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
importProjectUsingSingeModulePerGradleProject();
assertModules("project", "projectA", "projectB", "projectC");
assertModuleModuleDepScope("projectB", "projectA", DependencyScope.COMPILE);
assertMergedModuleCompileModuleDepScope("projectB", "projectA");
if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("2.5")) >= 0) {
assertModuleModuleDepScope("projectC", "projectA", DependencyScope.PROVIDED);
}
@@ -948,4 +979,27 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
assertModuleLibDepScope("project2_test", "Gradle: junit:junit:4.11", DependencyScope.COMPILE);
assertModuleLibDepScope("project2_test", "Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.COMPILE);
}
private void assertMergedModuleCompileLibDepScope(String moduleName, String depName) {
if (isGradleOlderThen_3_4()) {
assertModuleLibDepScope(moduleName, depName, DependencyScope.COMPILE);
}
else {
assertModuleLibDepScope(moduleName, depName, DependencyScope.PROVIDED, DependencyScope.TEST, DependencyScope.RUNTIME);
}
}
private void assertMergedModuleCompileModuleDepScope(String moduleName, String depName) {
if (isGradleOlderThen_3_4()) {
assertModuleModuleDepScope(moduleName, depName, DependencyScope.COMPILE);
}
else {
assertModuleModuleDepScope(moduleName, depName, DependencyScope.PROVIDED, DependencyScope.TEST, DependencyScope.RUNTIME);
}
}
private boolean isGradleOlderThen_3_4() {
return GradleVersion.version(gradleVersion).getBaseVersion().compareTo(GradleVersion.version("3.4")) < 0;
}
}

View File

@@ -441,7 +441,13 @@ class DependencyResolverImpl implements DependencyResolver {
def scopes = ideaPlugin.model.module.scopes
def providedPlusScopes = scopes.get(providedScope)
if (providedPlusScopes && providedPlusScopes.get("plus")) {
providedConfigurations.addAll(providedPlusScopes.get("plus"))
// filter default 'compileClasspath' for slight optimization since it has been already processed as compile dependencies
def ideaPluginProvidedConfigurations = providedPlusScopes.get("plus").findAll { it.name != "compileClasspath"}
ideaPluginProvidedConfigurations.each {
def (providedDependencies, _) = resolveDependencies(it, providedScope)
new DependencyTraverser(providedDependencies).each { resolvedMap.put(resolve(it), it) }
result.addAll(providedDependencies)
}
}
}
if (sourceSet.name == 'main' && myProject.plugins.findPlugin(WarPlugin)) {

View File

@@ -70,7 +70,7 @@ public abstract class AbstractModelBuilderTest {
public static final Object[][] SUPPORTED_GRADLE_VERSIONS = {
{"1.9"}, /*{"1.10"}, {"1.11"},*/ {"1.12"},
{"2.0"}, /*{"2.1"}, {"2.2"} , {"2.3"}, {"2.4"}, */{"2.5"}, /*{"2.6"}, {"2.7"}, {"2.8"},*/ {"2.9"}, /*{"2.10"}, {"2.11"}, {"2.12"}, {"2.13"}, */{"2.14.1"},
{"3.0"}, {"3.1"}
{"3.0"}, /*{"3.1"}, {"3.2"},*/ {"3.3"}, {"3.4-rc-1"}
};
public static final String BASE_GRADLE_VERSION = String.valueOf(SUPPORTED_GRADLE_VERSIONS[SUPPORTED_GRADLE_VERSIONS.length - 1][0]);