travis CI是否必须使用gradlew?

Mau*_*ker 6 git android gradle travis-ci

我正在尝试为我正在进行的项目设置CI,我想知道我们是否真的需要提交gradlew和/或gradle.bat文件才能使其正常工作.

有没有解决方法,或提交这些文件是唯一的方法?

Mar*_*rga 6

提交gradlew脚本对于在Travis CI中构建Gradle项目不是强制性的。

最好的替代方法可能是使用预安装的Gradle安装Gradle包装器。这是一个简单的build.gradle样子:

apply plugin: 'java'

check.doFirst {
    println "Running gradle v${project.gradle.gradleVersion}"
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.4.1'
}
Run Code Online (Sandbox Code Playgroud)

如果您将此构建文件与标准Travis描述符一起使用,它将无法正常工作。它只会用于gradle运行您的构建。但是,如果将包装器任务添加到描述符中:

language: java
jdk:
  - oraclejdk8
before_install:
  gradle wrapper
Run Code Online (Sandbox Code Playgroud)

Travis将首先运行包装器任务,然后正确检测到gradlew存在的包装器任务并使用它来运行您的构建。

但是,这种方法的缺点是可能破坏您的构建。如果您使用Gradle中预安装的Gradle版本之后实现的某些功能,则该gradle wrapper步骤将失败。这种功能的示例是S3 Maven存储库,我相信它是在v2.4中引入的。

为避免这种情况,您可以将包装器任务移至单独的构建文件,例如wrapper.gradle

task wrapper(type: Wrapper) {
    gradleVersion = '3.4.1'
}
Run Code Online (Sandbox Code Playgroud)

并将.travis.yml文件更改为:

language: java
jdk:
  - oraclejdk8
before_install:
  gradle -b wrapper.gradle wrapper
Run Code Online (Sandbox Code Playgroud)

这应该做。此设置使用预安装的Gradle来安装包装程序,而无需更改您的主构建脚本。

您可以在此处看到一个示例构建这是整个GitHub存储库


注意:还有另一种方法。您可以使用该before_install步骤从可下载的发行版中安装所需的Gradle版本,也可以使用Debian软件包系统。但是,这将需要sudo特权。这样的虚拟机需要很长时间才能启动(大约30秒?)。

另一件事,我在另一个答案的注释中提到了它,如果提交gradlew脚本,则还需要包装器jar和属性。jar是一个二进制文件,有时将其放入版本控制中是有争议的。因此,如果使用上述解决方案,则也可以省略提交gradle文件夹。