1

アーティファクトを作成してアップロードするためのgradleのすべての部分がどのように適合するかを理解するのに、いくつかの実際の問題があります。

このスクリプトでの私の意図は単純です。ソース tarball と、場合によっては多数の依存関係をダウンロードし、「build.sh」シェルスクリプトを実行してバイナリ 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 からのエラーは「エンティティがありません」です。次を参照してください: Nexus への PUT に対する要求エンティティの応答がありません

4

1 に答える 1