gradle tar任务未执行

gradle tar任务未执行,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 = Compre

我正在为一个非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)
    }
}
当我尝试使用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

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

您已经陷入了在执行阶段而不是配置阶段配置任务的经典错误。解决方法是删除
我遇到了一个有趣的情况,在tar任务中使用doLast{}时,我遇到了这个问题

这是因为一个多项目构建:

build.gradle
--> sub-project
    --> build.gradle
在这种情况下,如果您尝试在主生成文件中包含一个引用该
项目(“:子项目”)
使用的内容的
tar
copy
任务,则开发人员会尝试将其包装在doLast中

例如,主build.gradle文件具有:

  task distTar(type: Tar, dependsOn: "buildDist") {
    description "Package ProjName into a Tar file"
    group "Build"
    baseName = 'outbasename'
    archiveName = baseName + '.tar.gz'
    compression = Compression.GZIP
    destinationDir = file(project(":packaging").buildDir.path)
    extension = 'tar.gz'
    into('outdir') {
      from project(":sub-project").war
    }
  }
所以他们得到了一个错误,
project(“:subproject”)。war
不存在。因此,为了解决这个问题,有人把任务和错误放在一边。糟糕

  task distTar(type: Tar, dependsOn: "buildDist") {
    doLast { // <-- BAD!!
      description "Package ProjName into a Tar file"
      group "Build"
      baseName = 'outbasename'
      archiveName = baseName + '.tar.gz'
      compression = Compression.GZIP
      destinationDir = file(project(":packaging").buildDir.path)
      extension = 'tar.gz'
      into('outdir') {
        from project(":sub-project").war
      }
    }
  }
task distTar(类型:Tar,dependsOn:“buildDist”){

doLast{//不可思议?我也遇到了这个问题,没有犯那个错误。生成路径的代码创建了一个不存在的路径(因此,没有源文件)。因此,当出现奇怪情况时,记录路径并检查它,如果它不是配置-执行问题注意,左移位运算符当前已被弃用,将在未来版本中删除:
  task distTar(type: Tar, dependsOn: "buildDist") {
    description "Package ProjName into a Tar file"
    group "Build"
    baseName = 'outbasename'
    archiveName = baseName + '.tar.gz'
    compression = Compression.GZIP
    destinationDir = file(project(":packaging").buildDir.path)
    extension = 'tar.gz'
    into('outdir') {
      from project(":sub-project").war
    }
  }
  task distTar(type: Tar, dependsOn: "buildDist") {
    doLast { // <-- BAD!!
      description "Package ProjName into a Tar file"
      group "Build"
      baseName = 'outbasename'
      archiveName = baseName + '.tar.gz'
      compression = Compression.GZIP
      destinationDir = file(project(":packaging").buildDir.path)
      extension = 'tar.gz'
      into('outdir') {
        from project(":sub-project").war
      }
    }
  }