Gradle 从构建所需的ZIP依赖项中提取文件的最佳方法

Gradle 从构建所需的ZIP依赖项中提取文件的最佳方法,gradle,dependency-management,Gradle,Dependency Management,我们的构建需要存储在Maven存储库中的几个特殊依赖项,这些依赖项不是简单的Java库,例如包含要包含在webapp中的JavaScript/CSS组件的Zip文件,或者执行各种任务的命令行构建工具。在某些情况下,对于这个构建,我只需要一小部分原本很大的zip归档文件 最初的解决方案是只使用一个“type:Copy”任务,但我发现对于较大的归档文件,在“配置”阶段会添加几秒钟,在初始构建完成所有工作后,再添加几秒钟执行最新检查 Gradle有更好的方法来处理这种依赖关系吗?我一点也不确定配置的困

我们的构建需要存储在Maven存储库中的几个特殊依赖项,这些依赖项不是简单的Java库,例如包含要包含在webapp中的JavaScript/CSS组件的Zip文件,或者执行各种任务的命令行构建工具。在某些情况下,对于这个构建,我只需要一小部分原本很大的zip归档文件

最初的解决方案是只使用一个“type:Copy”任务,但我发现对于较大的归档文件,在“配置”阶段会添加几秒钟,在初始构建完成所有工作后,再添加几秒钟执行最新检查

Gradle有更好的方法来处理这种依赖关系吗?我一点也不确定配置的困难是什么,我猜最新的检查会遍历文件树并检查每个文件,我并不真正需要这些文件,zip或输出目录也不会被构建修改。Gradle应该已经知道它是否碰巧从回购协议获得了更新的依赖关系

ext {
    barVersion = "1.0.9"
    barBaseDir = "${buildDeps}/bar"
    //Would ideally like to not deal with this, and extract "*.zip/*/" directly to
    //"${buildDeps}/bar"
    barDir = "${buildDeps}/bar/bar-${barVersion}"
}
configurations {
    special
}
dependencies {
    special "com.mycorp.foo:bar:${barVersion}@zip"
}
task extractBar(type:Copy) {
    destinationDir = file barBaseDir
    from zipTree(configurations.special.fileCollection{dep -> dep.name == 'bar'}.singleFile)
    //Some times only need a small part for the actual build. The full package may either not be
    //required for this build, or only at runtime on the end server
    include "*/js/**/*"
    include "*/sass/**/*"
    include "*/schemas/**/*"
}

相反,它做得很好。