运行 在 gradle 上使用缓存的依赖项和插件进行黄瓜测试

Run cucumber test with cached dependencies and plugins on gradle

你好,我想 运行 在一个 gradle 项目上用黄瓜做一些测试,我试图 运行 这个测试是在另一台 PC 上(网络访问受限)所以我 copy/pasted ~./gradle/caches 下的所有内容和 build, src and build.gradle 之类的项目文件,并将所有内容放在与原始

相同的位置

所以一旦我把所有东西都准备好,我 运行 这个

  gradle --no-daemon --offline cucumber

我失败了

> Could not resolve all dependencies for configuration ':classpath'.
   > Could not download gradle-cucumber-plugin.jar (com.github.samueltbrown:gradle-cucumber-plugin:0.9): No cached version available for offline mode

奇怪的是我在缓存目录中有文件

~/.gradle/caches/modules-2/files-2.1/com.github.samueltbrown/gradle-cucumber-plugin/0.9/7b65c67654715025eed1924
0c4f7defbef9645e0# ls
gradle-cucumber-plugin-0.9.jar

仅供参考,我没有像我希望的那样使用 gradle/java 的那种经验,所以任何类型的建议都很好,这就是插件在 "required" 上的位置 build.gradle

plugins {
  id "com.github.samueltbrown.cucumber" version "0.9"
}

谢谢

看到这个打开Gradle issue

Gradle 缓存目前不是完全可移植的。如果 .gradle 文件夹的绝对路径在两台机器上完全相同,它就可以工作。如果两台机器上的用户名不同,~/.gradle的绝对路径是不一样的!

有几种方法可以解决这个问题,按照所需努力的顺序,从最少到最多:

1。 运行 没有 --offline 一次

如果这在你的网络受限的机器上是可能的,运行 一次没有离线标志,依赖项将不会再次下载,但校验和是 - 更重要的是缓存现在已经过验证并且适合与--offline 标志。

2。将 .gradle 移动到可重复的路径

通过在两台机器上设置 GRADLE_USER_HOME 将 gradle 缓存文件夹移动到类似 /tmp/.gradle 的位置,然后在机器之间复制 gradle 缓存。

3。将所有依赖项导出到本地文件夹

在网络连接的机器上,使用 gradle 任务将所有依赖项导出到文件系统文件夹。将文件夹复制到另一台机器,并在第二台机器上使用 flatdir 存储库。

repositories {
  flatDir {
    dirs 'lib' //folder containing dependencies
  }
}

(您也可以导出到 maven 格式的存储库而不是 flatdir。参见 )

4。改为使用 Maven 缓存

根据我的经验,Maven 的 .m2 文件夹更便于携带。创建一个具有相同依赖项的 maven 项目,将依赖项缓存到 .m2 中,然后将 .m2 复制到第二台机器上。在第二台机器上添加 mavenLocal() 作为 repo。