为什么Gradle没有在IntelliJ 2016中的sourceSets下正确应用依赖范围?

时间:2016-07-26 10:21:15

标签: intellij-idea gradle dependency-management

我有一个带有单个模块的gradle项目。

我已宣布'提供了'配置以在父build.gradle文件中启用提供范围的依赖项:

subprojects {
    apply plugin: 'maven'
    apply plugin: 'java'
    apply plugin: 'idea'

    configurations {
        provided
    }

    idea {
        module {
            scopes.PROVIDED.plus += [configurations.provided]
        }
    }

    sourceSets {
        main.compileClasspath += configurations.provided
        test.compileClasspath += configurations.provided
        test.runtimeClasspath += configurations.provided
    }

    ... other stuff...
}

在模块build.gradle中,我声明了以下依赖项:

dependencies {
    testCompile 'org.elasticsearch:elasticsearch:2.3.1:tests'
    compile 'org.apache.commons:commons-io:1.3.2'
    compile 'org.apache.commons:commons-lang3:3.4'
    compile 'org.elasticsearch:elasticsearch:2.3.1'
    compile 'org.slf4j:slf4j-api:1.7.12'
    provided 'org.slf4j:slf4j-simple:1.7.12'
}

当我展开Gradle工具窗口时,它也会提供倒数第二个依赖关系,即使它具有编译范围:

Screen shot of Gradle tool window

我希望在此工具窗口中看到与(Compile)旁边列出的依赖项,而不是(Provided)

所以问题是:为什么我不是?

是不是因为提供了slf4j(slf4j-simple)的实现,并且依赖于slf4j-api,所以也自动提供了一个?我怎么阻止它?我应该停下来吗?我希望API作为编译依赖项,但我希望使用它的项目来决定它们自己的实现......

1 个答案:

答案 0 :(得分:0)

IntelliJ IDEA Ultimate build 163.12024.16也遇到了同样的问题。我无法修复它。但是当我升级到构建171.4249.39时,它神奇地消失了。 (当再次使用上一个版本时,范围会回到不正确的"再次提供")