Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java gradle中的可传递文件依赖关系_Java_Gradle - Fatal编程技术网

Java gradle中的可传递文件依赖关系

Java gradle中的可传递文件依赖关系,java,gradle,Java,Gradle,我想控制我在多项目Java构建中的哪些依赖项是可传递的。我当前的解决方案是在根项目中设置“导出”配置: allprojects { configurations { export { description = 'Exported classpath' } compile { extendsFrom export } } } 项目A具有多个文件依赖项: depende

我想控制我在多项目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.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)