Gradle 当READY在任务运行前未设置渐变属性时

Gradle 当READY在任务运行前未设置渐变属性时,gradle,Gradle,我在gradle.properties文件中有一个版本属性,它给出了我正在构建的版本。我在构建中有一个名为release的任务,如果该任务出现在任务图中,将上载到快照repo。然而,发生的情况是,即使我在构建任务中包含了发布任务,但当uploadArchives运行时,快照并没有附加到我的version属性,因此它尝试上载到错误的存储库并失败。准备就绪时会运行,但在上载存档之前似乎不会运行。有人能解释一下这里发生了什么吗 uploadArchives { repositories {

我在gradle.properties文件中有一个版本属性,它给出了我正在构建的版本。我在构建中有一个名为release的任务,如果该任务出现在任务图中,将上载到快照repo。然而,发生的情况是,即使我在构建任务中包含了发布任务,但当uploadArchives运行时,快照并没有附加到我的version属性,因此它尝试上载到错误的存储库并失败。准备就绪时会运行,但在上载存档之前似乎不会运行。有人能解释一下这里发生了什么吗

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网站上的示例非常相似,因此我不知道出了什么问题


脚本在配置阶段检查project.version值,不是在任务执行时检查,而是在构建任务执行图后才对其进行修改。解决此问题的一种方法是从taskGraph内重写存储库url。whenReady回调:

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
    }
}