gradle tar 任务未执行

标签 gradle tar

我正在为一个非 Java 项目编写 Gradle 构建,用于将现有目录和 tar 文件组装成 .tar.gz 如果我使用这样的定义,则 tar 任务将跳过:

task archive(dependsOn: 'initArchive',type: Tar) << {
    baseName = project.Name
    destinationDir = new File(project.buildDir.path+'/installer')
    compression = Compression.GZIP
    from (archiveDir)
    doLast{
        checksum(archivePath)
    }
}

这是控制台输出
:jenkins-maven-sonar:archive
Skipping task ':jenkins-maven-sonar:archive' as it has no source files.
:jenkins-maven-sonar:archive UP-TO-DATE

BUILD SUCCESSFUL

Total time: 9.056 secs

当我尝试使用 tar 任务作为方法时,它失败了,提示找不到方法
task archive(dependsOn: 'initArchive') << {
    tar{
    baseName = project.Name
    destinationDir = new File(project.buildDir.path+'/installer')
    compression = Compression.GZIP
    from (archiveDir)
    doLast{
        checksum(archivePath)
    }
    }
}

FAILURE: Build failed with an exception.

* Where:
Build file '/home/anadi/Code/da-ci-installers/build.gradle' line: 29

* What went wrong:
Execution failed for task ':jenkins-maven-sonar:archive'.
> Could not find method tar() for arguments [build_6a2bckppv2tk8qodr6lkg5tqft$_run_closure3_closure5_closure7@4a5f634c] on task ':jenkins-maven-sonar:archive'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

BUILD FAILED

Total time: 8.749 secs

我们可以像 Gradle 允许运行复制一样运行 tar 任务吗?在同一个构建中,我有一个如下所示的块,我想知道 tar 是否可以以相同的方式使用
            copy {
                project.logger.info("Copying bundle :: "+bundle[x])
                from(rootProject.projectDir.path+"/3rd-party-tools/"+bundle[x]) {
                    include '**/*.*'
                }
                into(archiveDir)
           }

如果不是,如果使用上述第一种形式,如何确保我的构建不会“跳过 tar”任务。

最佳答案

您已经犯了在执行阶段而不是配置阶段配置任务的经典错误。解决方法是删除<<在第一个代码片段中。

如果您发现 << (以及它造成的差异)令人困惑,一个好的解决方案是永远不要使用 <<但总是更明确doLast {} .

没有tar方法,但通常最好将这些事情作为单独的任务进行处理。 (如果有充分的理由,像 copy 这样的方法应该比相应的任务更受欢迎。)

关于gradle tar 任务未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558824/

相关文章:

linux - tar 和拆分时使用所有内核

ubuntu - 如何 `docker import` ubuntu云图像?

function - 'def' 和没有 'def' 之间的区别

Android Gradle 设置

android - 错误:等级:> java.io.IOException:输出jar为空。您是否指定了正确的 '-keep'选项?

linux - tar zxf 与 -xvf 之间的区别

backup - tar 是否忽略 --after-date 选项?

linux - 在 bash 中用 ' ' 替换 '\'

android - Android Studio Gradle同步失败,CreateProcess错误= 2

android - 在多模块 Android 项目中导入库的最佳实践