Gradle上传如何真正起作用?

时间:2013-11-01 19:02:02

标签: gradle

我有一些实际问题需要了解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

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

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

1 个答案:

答案 0 :(得分:0)

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