Java gradle中的可传递文件依赖关系
我想控制我在多项目Java构建中的哪些依赖项是可传递的。我当前的解决方案是在根项目中设置“导出”配置:Java gradle中的可传递文件依赖关系,java,gradle,Java,Gradle,我想控制我在多项目Java构建中的哪些依赖项是可传递的。我当前的解决方案是在根项目中设置“导出”配置: allprojects { configurations { export { description = 'Exported classpath' } compile { extendsFrom export } } } 项目A具有多个文件依赖项: depende
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.jar
和B.jar
不在类路径上,但C.jar
在类路径上进行编译
我不确定这是否是“格拉德尔”的做事方式。为了配置可传递性,我宁愿为项目a中的依赖项项指定属性或配置闭包,而不是使用不同的“导出”配置
对于文件依赖项,这是可能的,还是有其他方法可以实现这一点?如果我正确理解您的场景,那么是的,这样做很容易。只需在依赖项声明的末尾添加一个选项闭包,以防止可传递依赖项(我将A、B、C.jar更改为X、Y、Z,因为我猜它们与项目A和B不一致): 这将阻止X.jar和Y.jar被添加到项目B的类路径中 或者,我不知道这对您的效果如何,也不推荐(只是想让您知道可能性),您可以在project B的构建中这样做。gradle:
configurations.compile.dependencies.find { it.name == "A.jar" }.exclude(jar: it)
configurations.compile.dependencies.find { it.name == "B.jar" }.exclude(jar: it)
希望能有帮助。我已经试过了,但没有效果。现在我稍微挖掘了一下,结果发现传递属性只适用于,而不适用于。因此,您可以说,从1.0到里程碑6,这是一个缺失的特性。也许你可以改变答案的第一部分来反映这一点,然后我可以接受。我会做得更好。我将在大约5小时后与Gradle的创始人交谈,我将快速询问他这方面的情况。@EricWendelin那么你发现了什么?
configurations.compile.dependencies.find { it.name == "A.jar" }.exclude(jar: it)
configurations.compile.dependencies.find { it.name == "B.jar" }.exclude(jar: it)