travis CI是否必须使用gradlew?

时间:2017-03-15 18:47:53

标签: android git gradle travis-ci

我正在尝试为我正在处理的项目设置CI,并且我想知道我们是否真的需要提交gradlew和/或{{1文件使它工作。

是否有针对此的解决方法,或提交这些文件是唯一的方法?

3 个答案:

答案 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 herethis 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行。

enter image description here

您可以为每个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使用这两个文件。