Java Gradle:如何从指定配置复制所有依赖项jar文件而不继承

Java Gradle:如何从指定配置复制所有依赖项jar文件而不继承,java,gradle,Java,Gradle,我需要将所有compileTest第三方依赖项JAR从所有项目复制到一个单独的目录中。但是我只需要直接依赖项,而不是从超级配置继承来的,也就是说,我不需要来自编译配置的依赖项 像下面这样的“默认”方法对我不起作用 task copyTestLibs(type: Copy) { into('libs-test') def javaProjects = subprojects.findAll { it.plugins.hasPlugin('java') } from java

我需要将所有
compileTest
第三方依赖项JAR从所有项目复制到一个单独的目录中。但是我只需要直接依赖项,而不是从超级配置继承来的,也就是说,我不需要来自
编译
配置的依赖项

像下面这样的“默认”方法对我不起作用

task copyTestLibs(type: Copy) {
    into('libs-test')
    def javaProjects = subprojects.findAll { it.plugins.hasPlugin('java') }
    from javaProjects*.configurations.testCompile
}
那么,有没有办法复制配置的直接依赖项而不复制继承的依赖项呢?

配置的
copy()
方法提供了一种创建另一个配置的方法,其中包含所有直接依赖项,而不包含可传递的依赖项。看看gradle dsl参考资料

详情请参阅。使用copy()方法的解决方案可以如下所示:

task copyTestLibs(type: Copy) {
    into('libs-test')
    def javaProjects = subprojects.findAll { it.plugins.hasPlugin('java') }
    from javaProjects*.configurations.testCompile*.copy()
}

最后我找到了一个解决方案:

task copyTestLibs(type: Copy) {
    into('libs-test')
    def javaProjects = subprojects.findAll { it.plugins.hasPlugin('java') }
    from javaProjects.collect {
        it.configurations.testCompile.copy().files {!(it instanceof ProjectDependency)}}.flatten().unique()
}

是的,这是一个正确的方向,但您的示例失败了,出现了一个错误:
没有方法签名:java.util.ArrayList.copy()适用于参数类型:()值:[]
我在代码段中输入了一个错误。我已经将`javaProjects*.configurations.testCompile.copy()')更改为javaProjects*.configurations.testCompile*.copy(),现在应该可以了。如果可能的话,您应该对此答案添加一个解释。请注意这个代码段:它将在配置时解决依赖关系。因此,即使任务未触发,依赖项也会从存储库中解析