アーティファクトを作成してアップロードするための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 に対する要求エンティティの応答がありません