whenReady在任务运行之前没有设置gradle属性

时间:2014-10-24 16:00:50

标签: gradle

我的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

1 个答案:

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