当前位置: 首页 > 知识库问答 >
问题:

Gradlew强制Travis CI工作吗?

金秦斩
2023-03-14

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

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

共有3个答案

孔光赫
2023-03-14

是的,这些文件是必需的。

我通过一些尝试和错误确定了这一点。我从我个人项目的一个分支中删除了它们,并将它们推送到GitHub,并且特拉维斯构建失败了。

如果你想知道日志是什么样子的,看看这个要点。

如下图所示,这是失败的错误:

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多分钟。

太长别读这两个文件。

苗阳文
2023-03-14

它不是强制性的,因为它已经为Java和Android项目预装了。

但是,这是推荐的方法,因为安装的版本取决于创建虚拟机的日期,可能已经过时。

您可以尝试使用gradle--version命令检查版本。

更新#1

我证明了我的答案是正确的,forking your MaterialSearchView:

Gradle版本2.2.1已经预安装,因此Gradle包装器不是强制性的,但它是推荐的方法,因为您的项目需要版本2.14.1。

script:
  - gradle clean build

我还证明了选择正确的答案是基于错误的假设。尝试使用不必要的文件并破坏构建不会使此文件成为强制性的,只是不要使用它并删除chmod行。

您可以在此处查看每个Gradle插件版本所需的Gradle版本,在您的情况下,插件版本2.2.3需要Gradle 2.14.1

唐兴发
2023-03-14

在Travis CI中构建Gradle项目时,提交gradlew脚本不是必需的。

最好的选择可能是使用预装的Gradle安装Gradle包装器。这就是一个简单的构建。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包装步骤将失败。此类特性的示例是在v2中引入的S3 maven存储库。我相信。

为了防止这种情况,您可以将包装器任务移动到单独的构建文件中,例如wrapper.gradle

task wrapper(type: Wrapper) {
    gradleVersion = '3.4.1'
}

并更改<代码>。特拉维斯。yml文件收件人:

language: java
jdk:
  - oraclejdk8
before_install:
  gradle -b wrapper.gradle wrapper

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

您可以在这里看到一个构建示例,这是整个GitHub存储库。

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

另一件事,我在另一个答案的评论中提到,如果您提交gradlew脚本,您还需要包装器jar和属性。jar是一个二进制文件,将其置于版本控制中有时会引起争议。因此,如果使用上述解决方案,还可以省略提交gradle文件夹。

 类似资料:
  • 当我在mods文件夹中运行命令“gradlew build”时,它返回“build SUCCESSFUL”,当我打开文件夹build/libs时,我得到两个文件,一个文件名为VER。jar和一个NAME-VER——源代码。所以我复制了NAME-VER。jar到我的minecraft mod文件夹中,游戏就可以开始了,但在minecraft中我得到的只是“mercuries_updater”,这可能

  • 我使用sw-precache生成Polymer-CLI构建过程中的服务工作,因此它旨在更新更新文件的散列,以表示需要更新缓存。但是缓存中没有替换我更新的内容,因此如果我使用ctrl-r刷新,它将获得旧版本,但如果使用ctrl-shift-r刷新,它将获得新版本。原因可能是我的服务人员没有更新。 这份文件说 如果与当前相比,服务辅助程序文件中甚至有一个字节的差异,它就认为它是新的。 ,但如果我的新服

  • 问题内容: 我正在尝试调试Java中涉及ClassCastException的问题。为了解决该问题,我需要知道从Object转换为特定类型时发生了什么。 谁能向我解释Java Cast操作符如何在Java级别和JVM级别工作? 问题答案: JLS是否足够好? 强制转换将应用于强制转换操作符的操作数(第15.16节):操作数表达式的类型必须转换为强制转换操作符显式命名的类型。铸造上下文允许使用: 身

  • 我有一个ASP。net core 3.1 MVC应用程序,使用OpenID连接Identity Server 4。我正在使用IdentityModel自动刷新应用程序中的访问令牌。配置如下所示: 我有一个控制器,它将从使用该标识服务器保护的下游应用编程接口中提取数据。我的MVC客户端请求范围api1和offline_access来获取刷新令牌。这些令牌存储在cookie中,因为服务上设置了。 一切

  • 4.6.6 强制属性操作符 在程序中,我们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时,我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。 对于指令:MOV [BX], 1H,其目标操作数[BX]是寄存器间接寻址方式,它指向一个存储单元。在作传送操作时,是把“1H”扩展成8位作字节传送,还是扩展成16位作字传送呢?这就使该指令具