在Gradle构建文件中排除传递依赖项时出错

时间:2014-11-10 10:12:28

标签: gradle

我必须从多模块项目的所有模块中排除一些依赖项。 使用Gradle 1.12,以下gradle构建文件有效:

subprojects {
    ...
    //blacklisted dependencies
    configurations {
        all*.exclude module: 'ojdbc14' //we use ojdbc6
        all*.exclude group: 'c3p0', module: 'c3p0' //newer versions use groupId: com.mchange
        all*.exclude module: 'oracledb' //we use ojdbc6
        ...
    }
    ...
}

升级到gradle版本2.1后出现错误:

  

您无法更改配置'providedCompileScope',因为它是   已经解决了!

如何使用较新的Gradle定义排除?

2 个答案:

答案 0 :(得分:1)

通常,我会通过指定

来排除传递依赖性
dependencies {
    myConfiguration('group:module:version') { transitive = false }
}

要对版本等进行更精细的控制,请查看ResolutionStrategy

答案 1 :(得分:1)

排除仍以相同方式指定。 Gradle只是告诉你之前没有告诉你的构建问题,即只能在配置解析之前声明排除。可能有一些自定义代码在configurations.providedCompileScope(或派生配置)上进行迭代,并且在配置阶段(即在构建脚本的评估期间)错误地执行,而不是在执行阶段(例如在任务操作中) )。此代码段(以及生成的--stacktrace)可能有助于找到有问题的代码:

configurations.providedCompileScope.incoming.beforeResolve { 
    println new Exception("resolved here") 
}

编辑:如果您的某个构建脚本中包含以下内容:

idea.module {
    scopes.PROVIDED.plus += configurations.providedCompileScope
}

将其更改为:

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

由于Gradle 2.x使用的Groovy版本中的行为更改,这是必要的。