我有一个项目,该项目具有一个由shadow plugin提供的名为shadowDistTar的任务。该任务的输出是tar文件。

我希望创建另一个Tar任务,它将输出的tar文件包含到一个新的tar文件中,该文件包含第一个tar文件和一些新文件。但是,我无法将tar文件包含在新文件中。

task("myNewTarTask", type: Tar) {
    // configure the Tar task here...

    project.afterEvaluate {

        // we put things in afterEvaluate so the outputs of shadowDistTar are known
        dependsOn shadowDistTar

        shadowDistTar.getOutputs().getFiles().each {
            include it.toString()
        }
    }
}

我认为这里的问题是include应该采用ANT样式的include规范,该规范应该相对于Tar任务的源目录,而不是绝对路径,这是我从getOutputs()获得的。我如何才能将输出作为ANT样式包含,或以其他方式将由shadowDistTar创建的tar文件包含到第二个tar中,而不必求助于将路径硬编码到include中?

最佳答案

参见Project.tarTree(...)。例如:

task("myNewTarTask", type: Tar) {
   dependsOn shadowDistTar
   from tarTree(shadowDistTar.archiveFile)
   from 'path/to/extra/files'
}

09-04 22:12