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

时间:2014-06-17 07:31:28

标签: java gradle

我需要将所有项目中的所有compileTest第三方依赖项jar复制到一个单独的目录中。但我需要仅直接依赖,而不是从超级配置继承,即我不需要compile配置的依赖关系。

"默认"以下方法对我不起作用。

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

那么有没有办法在没有继承的情况下复制配置的直接依赖?

2 个答案:

答案 0 :(得分:1)

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

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()
}

答案 1 :(得分:-1)

Configuration的copy()方法提供了一种方法来创建具有所有直接依赖关系且其中没有传递依赖关系的另一个配置。看看gradle dsl reference http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.Configuration.html#org.gradle.api.artifacts.Configuration:copy()

了解详情。使用copy()方法的解决方案如下所示:

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