gradle中的传递文件依赖项

时间:2011-11-28 11:12:32

标签: java gradle

我想控制多项目Java构建中的哪些依赖项是可传递的。我目前的解决方案是在根项目中设置“导出”配置:

allprojects {
    configurations {
        export {
            description = 'Exported classpath'
        }
        compile {
            extendsFrom export
        }
    }
}

项目A有多个文件依赖项:

dependencies {
    compile files('A.jar', 'B.jar')
    export files('C.jar')
}

项目B依赖项目A,但只有C.jar应该在类路径上进行编译,所以添加:

dependencies {
    export project(path: ':A', configuration:'export')
}

这会产生所需的结果,A.jarB.jar不在类路径上,但C.jar在类路径上进行编译。

我不确定这是否是“gradle”做事方式。要配置传递性,我宁愿为项目A中的依赖项指定属性或配置闭包,而不是使用不同的“导出”配置。

这是否可能存在文件依赖关系,还是有其他方法可以实现此目的?

1 个答案:

答案 0 :(得分:3)

如果我理解你的情况正确,那么很容易做到这一点。只需在依赖项声明的末尾添加一个选项闭包,以防止传递依赖(我已将A,B,C .jar更改为X,Y,Z,因为我猜它们与项目A和B不一致) :

// Project A build.gradle
dependencies {
   compile(files('X.jar', 'Y.jar')) { transitive = false }
   export files('Z.jar')
}

这会阻止X.jar和Y.jar被添加到项目B的类路径中。

或者,我不知道这对你有多好,并且不推荐它(只是想让你知道可能性)你可以在项目B的build.gradle中做到这一点:

configurations.compile.dependencies.find { it.name == "A.jar" }.exclude(jar: it)
configurations.compile.dependencies.find { it.name == "B.jar" }.exclude(jar: it) 

希望有所帮助。