Java 在gradle上使用缓存的依赖项和插件运行cucumber测试

Java 在gradle上使用缓存的依赖项和插件运行cucumber测试,java,gradle,cucumber,Java,Gradle,Cucumber,嗨,我想在gradle项目上运行一些cucumber测试,我试图在另一台PC上运行此测试(网络访问受限),所以我复制/粘贴了./gradle/caches下的所有内容,以及build、src和build.gradle等项目文件,并将所有内容放在与原始文件相同的位置 所以一旦我把所有东西都准备好,我就开始做这个 gradle --no-daemon --offline cucumber 我失败了 > Could not resolve all dependencies for conf

嗨,我想在gradle项目上运行一些cucumber测试,我试图在另一台PC上运行此测试(网络访问受限),所以我复制/粘贴了
./gradle/caches
下的所有内容,以及
build、src和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
奇怪的是我把文件放在caches目录下

~/.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的经验,所以任何建议都是很好的,这就是build.gradle上“需要”插件的地方

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

看到这个打开了吗

Gradle缓存目前并不完全可移植。如果.gradle文件夹的绝对路径在两台机器上完全相同,则它确实有效。如果两台机器上的用户名不同,则
~/.gradle
的绝对路径不同

有几种方法可以解决这个问题,按照所需的工作顺序,从最小到最大:

1.不带
运行--脱机运行一次
如果在网络受限的计算机上可以执行此操作,请在不带脱机标志的情况下运行一次,依赖项将不会再次下载,但校验和是-更重要的是,缓存现在已验证并适合与
--offline
标志一起使用

2.将
.gradle
移动到可重复的路径 通过在两台计算机上设置
gradle\u USER\u HOME
,然后在两台计算机之间复制gradle缓存,将gradle缓存文件夹移动到类似
/tmp/.gradle
的位置

3.将所有依赖项导出到本地文件夹 在网络连接的计算机上,使用gradle任务将所有依赖项导出到文件系统文件夹。将文件夹复制到另一台机器上,并在第二台机器上使用flatdir repo

repositories {
  flatDir {
    dirs 'lib' //folder containing dependencies
  }
}
(您还可以导出为maven格式的回购协议,而不是flatdir。请参阅)

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

谢谢,我会试试你的建议谢谢你,第二步已经足够了,我在docker容器中运行这个,它就像一个符咒