我正在尝试为我正在处理的项目设置CI,并且我想知道我们是否真的需要提交gradlew
和/或{{1文件使它工作。
是否有针对此的解决方法,或提交这些文件是唯一的方法?
答案 0 :(得分:5)
在Travis CI中构建Gradle项目不是强制提交gradlew
脚本。
可能最好的替代方法是使用预安装的Gradle来安装Gradle包装器。这就是简单build.gradle
的样子:
apply plugin: 'java'
check.doFirst {
println "Running gradle v${project.gradle.gradleVersion}"
}
task wrapper(type: Wrapper) {
gradleVersion = '3.4.1'
}
如果将此构建文件与标准Travis描述符一起使用,则无法使用。它只需使用gradle
来运行您的构建。但是,如果将包装器任务添加到描述符:
language: java
jdk:
- oraclejdk8
before_install:
gradle wrapper
Travis将首先运行包装器任务,然后正确检测gradlew
是否存在并使用它来运行您的构建。
然而,这种方法的缺点可能会破坏你的构建。如果您在Gradle中使用在预安装的Gradle版本之后实现的某些功能,则gradle wrapper
步骤将失败。此类功能的示例是S3 maven存储库,我相信它是在v2.4中引入的。
为了防止这种情况,您可以将包装器任务移动到单独的构建文件,假设wrapper.gradle
:
task wrapper(type: Wrapper) {
gradleVersion = '3.4.1'
}
将.travis.yml
文件更改为:
language: java
jdk:
- oraclejdk8
before_install:
gradle -b wrapper.gradle wrapper
这应该这样做。此设置使用预安装的Gradle来安装包装器,而无需更改主构建脚本。
您可以看到example build here和this is the whole GitHub repository。
注意:还有另外一种方法。您可以使用before_install
步骤从可下载的发行版中安装所需的Gradle版本,也可以使用Debian软件包系统。但是,这需要sudo
个权限。这样的虚拟机需要很长时间才能启动(大约30秒?)。
另一件事,我在另一个答案的评论中提到它,如果你提交gradlew
脚本,你还需要包装jar和属性。 jar是一个二进制文件,并将其置于版本控制中有时被视为有争议。因此,如果您使用上述解决方案,您也可以省略提交gradle
文件夹。
答案 1 :(得分:2)
这不是强制性的,因为它已经是pre-installed用于Java和Android项目。
但是,它是推荐的方式,因为安装的版本取决于创建虚拟机的日期,可能已过时。
您可以尝试使用gradle --version
命令查看version。
更新#1
我证明我的回答是正确的,因为你MaterialSearchView:
Gradle版本2.2.1已经预先安装,因此Gradle包装器不是必需的,但它是推荐的方式,因为您的项目需要版本2.14.1。
script:
- gradle clean build
我还证明所选答案正确是基于错误的假设。尝试使用不必要的文件并打破构建并不强制使用此文件,只是不要使用它并删除chmod行。
您可以为每个Gradle插件版本检查here所需的Gradle版本,在您的情况下,插件版本2.2.3需要Gradle 2.14.1 +
答案 2 :(得分:0)
是的,这些文件是必需的。
我通过一些试验和错误确定了这一点。我从一个个人项目的分支中删除了它们并将它们推送到GitHub,并且travis构建失败了。
如果您好奇日志的内容,check this gist。
正如您在底部附近看到的那样,这是失败的错误:
chmod: cannot access `gradlew': No such file or directory
The command "chmod +x gradlew" failed and exited with 1 during .
次要编辑:我尝试将其与gradlew文件一起使用,但不使用gradlew.bat文件。这适用于简单的清理/构建,但是当Travis尝试启动模拟器时,它会挂起超过10分钟。
TL; DR使用这两个文件。