我正在尝试为我正在处理的项目设置 CI,我想知道我们是否真的需要提交 gradlew
和/或 gradle.bat
文件以使其工作。
是否有解决此问题的方法,或者提交这些文件是唯一的方法?
最佳答案
提交 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'
}
如果您将此构建文件与标准 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
步骤从可下载的发行版或使用 Debian 包系统安装所需的 Gradle 版本。但是,这需要 sudo
权限。这样的虚拟机需要很长时间才能启动(大约 30 秒?)。
另一件事,我在另一个答案的评论中提到过,如果您提交 gradlew
脚本,您还需要包装器 jar 和属性。 jar 是一个二进制文件,将其置于版本控制中有时被认为是有争议的。因此,如果您使用上述解决方案,您也可以省略提交 gradle
文件夹。
关于android - travis CI 必须使用 gradlew 才能工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42818269/