我有一些实际问题需要了解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
答案 0 :(得分:0)
我的问题的根本原因是我正在测试一个空文件。 Nexus不喜欢空文件。一旦我将内容放入其中,Nexus就很高兴并且代码正常运行。