升级Gradle包装器

升级Gradle包装器,gradle,Gradle,我正在和我的项目一起工作,该项目生成一些文件,以便在主机上下载和安装gradle。这些文件将检入项目中。我的项目结构如下所示: /common/common.gradle /module-a/build.gradle /module-b/build.gradle /module-c/build.gradle project1 project2 <gradlew files> 我的每个项目都应用共享common.gradle文件中的公共设置,该文件包含以下任务: task wrap

我正在和我的项目一起工作,该项目生成一些文件,以便在主机上下载和安装gradle。这些文件将检入项目中。我的项目结构如下所示:

/common/common.gradle
/module-a/build.gradle
/module-b/build.gradle
/module-c/build.gradle
project1
project2
<gradlew files>
我的每个项目都应用共享common.gradle文件中的公共设置,该文件包含以下任务:

task wrapper(type: Wrapper) { 
    distributionUrl = "http://<nexus>:8081/nexus/content/repositories/thirdparty/org/gradle/gradle-bin/1.10/gradle-bin-1.10-bin.zip"
}
任务包装器(类型:包装器){
distributionUrl=“http://:8081/nexus/content/repositories/thirdparty/org/gradle/gradle-bin/1.10/gradle-bin-1.10-bin.zip”
}
在每个项目中,这允许我运行“gradle包装器”并生成gradlew脚本,该脚本将执行已下载的gradle版本。当我查看此任务(在每个子项目中)生成的gradle-wrapper.properties时,我的distributionUrl是来自包装器任务的绝对路径,而不是对common.gradle中设置的动态/相对引用

那么,当我想升级到gradle的下一个版本时会发生什么呢?我需要在每个项目中重新运行gradle包装器吗?是否有某种方法使DistributionUrl引用成为共享属性


如果您有任何见解,我们将不胜感激。

我现在通过仅在父目录中运行gradle包装器解决了这个问题,因此我的项目结构如下所示:

/common/common.gradle
/module-a/build.gradle
/module-b/build.gradle
/module-c/build.gradle
project1
project2
<gradlew files>
project1
项目2
在我的CI服务器上,然后使用-p选项指定子目录。像这样:

./gradlew -p project1 <target>
/gradlew-p项目1

这对我们来说暂时有效,直到gradlew变成Peter提到的二进制。请参阅。

您是在谈论单个版本还是多个版本?Gradle包装器应该每个构建安装一次,而不是每个(子)项目安装一次。嘿,Peter,看起来我每个子项目安装一次。我编辑了我的问题来澄清。我将如何进行每次构建一次?我应该在根级别删除build.gradle吗?只有根
build.gradle
应该声明包装器任务(在最近的gradle版本中,此任务甚至是自动声明的),因此包装器任务应该只针对根项目执行。每个构建(根目录中)应该只有一个
gradlew
gradlew.bat
脚本,以及一个
gradle/wrapper
目录。好吧,这很有意义,那么如何运行gradlew呢?您必须在每个子项目中执行“./gradlew”?目前还没有正式的解决方案,但是有一些简单的shell脚本(例如来自SpringSource的人)可以放在您的路径上,并在目录层次结构中向上搜索
gradlew
。我强烈推荐这种方法。从长远来看,将有一个
gradlew
二进制文件像常规应用程序一样安装。