我是Gradle的新手。我有一个多项目构建,它使用了项目中当前打包的一些依赖项(使用存储库和flatDir(,因为它们在artifactory中不可用。我想删除这个本地文件夹,下载几个保存这些依赖项的档案,解压缩它们,然后按常规进行构建。我将使用https://plugins.gradle.org/plugin/de.undercouch.download下载,但我不知道如何在任何依赖项解决之前做到这一点(理想情况下,如果还没有完成下载(。目前,据我所知,构建在配置阶段失败:
`A problem occurred configuring project ':sub-project-A'.
> Could not resolve all files for configuration ':sub-project-A:compileCopy'.
Could not find :<some-dependency>:.
编辑:下载文件有效。仍在努力解压缩档案:
task unzipBirt(dependsOn: downloadPackages, type: Copy) {
println 'Unpacking archiveA.zip'
from zipTree("${projectDir}/lib/archiveA.zip")
include "ReportEngine/lib"
into "${projectDir}/new_libs"
}
如何在配置阶段运行此操作?
我最终在配置阶段中使用复制来强制解压缩
copy {
..
from zipTree(zipFile)
into outputDir
..
}
请参阅Project.files(Object…(,其中说明
您可以将以下任何类型传递到此方法:
任务。已转换为任务的输出文件。如果将文件集合用作另一个任务的输入,则执行该任务。
所以你可以做:
task download(type: Download) {
...
into "$buildDir/download" // I'm guessing the config here
}
task unzip {
dependsOn download
inputs.dir "$buildDir/download"
outputs.dir "$buildDir/unzip"
doLast {
// use project.copy here instead of Copy task to delay the zipTree(...)
copy {
from zipTree("$buildDir/download/archive.zip")
into "$buildDir/unzip"
}
}
}
task dependency1 {
dependsOn unzip
outputs.file "$buildDir/unzip/dependency1.jar"
}
task dependency2 {
dependsOn unzip
outputs.file "$buildDir/unzip/dependency2.jar"
}
dependencies {
compile files(dependency1)
testCompile files(dependency2)
}
注意:如果拉链里有很多罐子,你可以做
['dependency1', 'dependency2', ..., 'dependencyN'].each {
tasks.create(it) {
dependsOn unzip
outputs.file "$buildDir/unzip/${it}.jar"
}
}