我的gradle.properties文件中有一个版本属性,它提供了我正在构建的版本。我在构建中有一个名为release的任务,如果在任务图中存在,将上传到快照仓库。然而,正在发生的事情是,即使我在构建任务中包含发布任务,当uploadArchives运行时,快照也不会附加到我的版本属性,因此它会尝试上载到错误的存储库并失败。准备好运行时,但似乎在uploadArchives之前没有运行。谁能解释一下这里发生了什么?
uploadArchives {
repositories {
ivy {
credentials {
username nexusUser
password nexusPassword
}
if (version.endsWith("-SNAPSHOT")) {
url nexusSnapshotRepository
} else {
url nexusReleaseRepository
}
}
}
}
gradle.taskGraph.whenReady {taskGraph ->
if (!taskGraph.hasTask(release)) {
version = version + '-SNAPSHOT'
}
println "release task not included - version set to $version"
}
task release(){
doLast{
println "Releasing"
}
}
这与gradle网站上的示例非常相似,所以我看不出有什么问题。
http://www.gradle.org/docs/current/userguide/tutorial_using_tasks.html
答案 0 :(得分:3)
脚本正在检查配置阶段的project.version
值(不是在执行任务时),而是仅在构建任务执行图之后对其进行修改。解决此问题的一种方法是从taskGraph.whenReady
回调中覆盖存储库URL:
uploadArchives {
repositories {
ivy {
name "nexus"
url nexusReleaseRepository
...
}
}
}
gradle.taskGraph.whenReady { taskGraph ->
if (!taskGraph.hasTask(release)) {
version += '-SNAPSHOT'
uploadArchives.repositories.nexus.url nexusSnapshotRepository
// ps: println has to go inside here
}
}