0

我对 Gradle 还很陌生。我有一个多项目构建,它使用项目中当前打包的一些依赖项(使用存储库和 flatDir),因为它们在工件中不可用。我想删除这个本地文件夹并下载几个包含这些依赖项的档案,解压缩它们并像往常一样继续构建。我将使用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"
}

如何使其在配置阶段运行?

4

2 回答 2

2

我最终在配置阶段使用复制来强制解压缩

copy {
     ..
     from zipTree(zipFile)
     into outputDir
     ..  
   }
于 2018-11-08T08:51:57.317 回答
0

请参阅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) 
}

注意:如果 zip 中有很多罐子,你可以这样做

['dependency1', 'dependency2', ..., 'dependencyN'].each {
    tasks.create(it) {
        dependsOn unzip
        outputs.file "$buildDir/unzip/${it}.jar" 
    }
}
于 2018-11-05T20:35:54.423 回答