【问题标题】:How do Gradle Uploads Really Work?Gradle 上传如何真正起作用?
【发布时间】:2013-11-01 19:02:01
【问题描述】:

我在理解 gradle 中创建和上传工件的所有部分如何组合在一起时遇到了一些实际问题。

我在这个脚本中的意图很简单:我想下载一个源 tarball 和可能的一堆依赖项,运行一个“build.sh”shellscript,它最终会创建一个二进制 tarball 并让 gradle 脚本将它发布到工件回购。

主要思想是我可以使用gradle的依赖管理、maven神器知识和构建并行化和避免来控制构建脚本本身的执行,主要是管理我的一组第三方二进制依赖...

以下脚本失败并出现 400 错误,我怀疑这是因为我没有将工件与实际输出文件链接。

正确和正确的方法是什么?

apply plugin: 'maven'

version 'testarch-4.2'

repositories {
  maven {
    url "http://nexus/..."
  }
}

configurations {
  sourceArchive
  binaryArchive
}

dependencies {
  sourceArchive "org.gnu:bash:4.2:src@tgz"
}

task buildFromSource(type: Exec) {
  inputs.files configurations.sourceArchive.files
  outputs.file file("${project.name}-${project.version}.tgz")
  executable './build.sh'
  def myArgs = configurations.sourceArchive.files.path
  myArgs.add(0, outputs.files.asPath)
  args myArgs
}

artifacts {
  // Is this really the only way to transform a singleton collection
  // into the singleton?
  //   def outputFile
  //   buildFromSource.outputs.files.each { outputFile = it }
  // Nope: this is better magic:
  def outputFile = buildFromSource.outputs.files.singleFile
  println outputFile.path
  binaryArchive file: outputFile, name: 'bash'
  // binaryArchive file: file(buildFromSource.outputs.files.asPath), name: 'bash'
}

uploadArchives {
  configuration = configurations.binaryArchive
  repositories.mavenDeployer {
    repository(url: "http://nexus/..") {
      authentication(userName: "me", password: "secret!")
    }
    pom.groupId = 'org.gnu'
  }
}

uploadArchives.dependsOn buildFromSource

我得到的错误是:

* What went wrong:
Execution failed for task ':uploadArchives'.
> Could not publish configuration 'binaryArchive'
   > Error deploying artifact 'org.gnu:bash:tgz': Error deploying artifact: Failed to transfer file: http://nexus/.../org/gnu/bash/testarch-4.2/bash-testarch-4.2.tgz. Return code is: 400

从 cmets 更新,同样的错误 - 试图访问 nexus 日志以进行进一步调试。

来自 Nexus 的错误是“缺少实体”,请参阅:Missing Request Entity response to a PUT to Nexus

【问题讨论】:

  • 我好想喜欢 gradle,但它真的让我觉得自己好蠢。该文档几乎假设您已经了解所有部分,或者假设您只是想建立一个货物崇拜。我如何才能真正了解对象可以接受的所有属性,甚至更好:了解对象是如何连接在一起的?
  • 你真的得到了 400 吗?很难说为什么会这样。我会检查 --info--debug 输出,以及 Nexus 日志。要了解对象可以接受的所有属性,请查看Gradle Build Language Reference,它进一步链接到 Javadoc/Groovydoc。
  • 我添加了我收到的错误消息......这基本上是正确的方法,还是我遗漏了一些明显的东西?有没有更好的方法将任务的输出连接到工件?
  • 我发现参考文档非常无用,因为它们没有列出您可以附加到某个构造的所有属性,并且因为方法的名称没有映射到您使用的实际字符串梯度脚本。这些映射如何相互映射是人们应该“知道”的事情。
  • 你能举一些例子吗?我建议将此讨论移至forums.gradle.org

标签: gradle


【解决方案1】:

我的问题的根本原因是我正在使用一个空文件进行测试。 Nexus 不喜欢空文件。我一将内容放入其中,Nexus 就很高兴并且代码可以正常工作。

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2017-06-22
    • 1970-01-01
    • 2012-03-09
    • 2012-10-23
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多