繁体   English   中英

gradle:tar 任务未创建 tar.gz

[英]gradle: tar task not creating a tar.gz

嗨,我在查看了许多方法和一些 SO 帖子后完成了一项 tar 任务。

task buildDist(type: Tar, dependsOn: jar) {
  print 'here'
  archiveName = 'xyz-' + version
  destinationDir = file('build/dist')
  extension = 'tar.gz'
  compression = Compression.GZIP

  from 'build/libs'
  include 'xyz.jar'
}
buildDist.mustRunAfter jar

我应用了java插件,并且jar任务使xyz.jar文件在build/libs下可用。 build/dist目录尚不存在,但我也尝试new File("build/dist") 那也不起作用-我什至将它指向存在的build目录-不起作用。 我使用/gradlew clean build运行整个脚本。 上面代码中的打印确实打印了。

我在这里做一些假设,因为您没有通过运行 Gradle 发布 output。

build任务只是一个普通的 Gradle 任务,它本身不做任何事情。 相反,它取决于其他任务。 如果您创建自己的自定义任务并且希望在执行build时包含它,则必须为其添加依赖项。 如果这不是问题并且您实际上已经这样做了,请提供更多详细信息,说明在运行build时是什么使其“不起作用”。

如果您想单独测试您的任务(例如,确保它在不运行单元测试或其他任何不相关的情况下正常工作),只需运行gradlew cleanBuildDist buildDist

关于“打印”语句的注释 - 它执行配置阶段,但这并不意味着您可以使用它来测试任务是否实际执行。 事实上,无论您执行什么任务,它很可能都会打印出来。 如果你想在执行时打印一些东西,你必须把它放在一个doLast块中。

您还应该更改其他一些内容:

  • 使用相对引用不是一个好习惯。 相反,使用buildDir属性来获取对构建目录的绝对引用。
  • 不要使用已弃用的方法,例如archiveNamedestinationDir 请改用archiveFileNamedestinationDirectory
  • extension属性也已被弃用,但如果您自己设置存档的全名,它将被忽略。 所以只需将其删除。 这也意味着您缺少全名的扩展名。
  • frominclude有点脆弱。 如果您只想 gzip 应用程序 jar,只需使用from jar.archivePath

例子:

task buildDist(type: Tar, dependsOn: jar) {
  archiveFileName = "${jar.baseName}-${version}.tar.gz"
  destinationDirectory = file("$buildDir/dist")
  compression = Compression.GZIP
  from jar.archivePath
}

build.dependsOn buildDist

最后,如果您的意图是创建一个可自行运行的应用程序分发(具有所有必需的依赖项),您应该考虑使用分发插件,也许还有应用程序插件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM