android - travis CI 必须使用 gradlew 才能工作吗?

标签 android git gradle travis-ci

我正在尝试为我正在处理的项目设置 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 herethis 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/

相关文章:

android - 一个漂亮的 imageview 框架和一个动画

linux - 将 Git SSH key 捆绑到私有(private) AMI 中

git - 从 git format-patch 上传到 ReviewBoard 在 "file not found in the repository"上失败

android - 安装Gradle插件v3.0

android - Android Studio-想要1 APK,但无法正常工作

java - 单击按钮时 EditText.getText().toString() 崩溃

android - 如何设置微小的通知图标徽章

android - ScrollTo 和 ScrollToExact 相当于 appium for android 中的 webView

Git - 糟糕的 merge 永久忽略子分支中的文件更改

android - Gradle 脚本自动版本并在 Android 中包含提交哈希