Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不同的机器上运行Gradle测试而不重新编译?_Java_Windows_Testing_Gradle - Fatal编程技术网

Java 如何在不同的机器上运行Gradle测试而不重新编译?

Java 如何在不同的机器上运行Gradle测试而不重新编译?,java,windows,testing,gradle,Java,Windows,Testing,Gradle,我正在尝试设置一个Windows测试服务器,以便通过SSH运行Java库项目的单元测试。实际构建发生在Linux服务器上 因此,我希望能够将预构建的项目复制到Windows计算机,并在其上运行\gradlew.bat测试,而无需重新编译它。因为我正在复制整个src和build文件夹,所以我希望Gradle意识到构建人工制品比源代码更新 但是,Gradle确实尝试重新编译源代码,但失败了(故意在Windows机器上没有安装JDK,因为我不想在Windows机器上构建): >任务:编译ejava失败

我正在尝试设置一个Windows测试服务器,以便通过SSH运行Java库项目的单元测试。实际构建发生在Linux服务器上

因此,我希望能够将预构建的项目复制到Windows计算机,并在其上运行
\gradlew.bat测试
,而无需重新编译它。因为我正在复制整个
src
build
文件夹,所以我希望Gradle意识到构建人工制品比源代码更新

但是,Gradle确实尝试重新编译源代码,但失败了(故意在Windows机器上没有安装JDK,因为我不想在Windows机器上构建):

>任务:编译ejava失败

失败:生成失败,出现异常

*出了什么问题:
任务“:compileJava”的执行失败。
>找不到tools.jar。请检查C:\Program Files\Java\jre1.8.0\U 251是否包含有效的JDK安装。

scp
在从Linux复制到Windows时不保留时间戳,但我验证了
build
目录中文件的时间戳比
src
目录的时间戳新。)

接下来我尝试了
testClasses
,但是(我认为这无论如何都不会奏效,而且看起来像是黑客攻击)

因此:

  • 为什么Gradle认为我的项目在复制到Windows机器后需要重新编译,即使文件修改时间戳的顺序似乎正确(
    build
    src
    build.Gradle
    新)
  • 如何确保Gradle在将项目复制到其他(Windows)计算机后,在运行测试之前不会尝试重建最新的依赖关系
这是我的
build.gradle
文件(它实际上非常简单):

下面是我如何从Linux服务器启动构建(一个接一个地手动复制各个文件/目录,以确保有序的时间戳不会造成任何差异):

sshtest@win“rmdir/Q/S工作区\测试”||
sshtest@win“mkdir工作区\测试”
scp-r build.gradle gradle gradlew.bat src buildtest@win:工作区\\测试
sshtest@win'cd Workspace\test&.\gradlew.bat--无后台程序测试'

为什么不直接在Windows服务器上安装JDK和build呢? Windows计算机资源受限(它也是一个VM)。此外,构建无论如何都需要在Linux服务器上进行。我真的希望避免缓慢而重复的重建。 为什么不在Linux服务器上测试(使用Wine)? 我试过了,但是我们的Linux库使用了Wine不支持的一些Win32 API(通过交叉编译的JNI),这会再次导致挂起。 进一步说明:

  • 我想运行默认的
    测试
    任务,而不是

    • 令人遗憾的是,这里的答案是:这似乎可以通过使用。需要注意的是,从我在Gradle网站上看到的一切来看,这是:

      • 其Gradle Enterprise产品的功能,或
      • 一些可以利用的东西,这是非常有限的,因为他们可能希望你为此付出代价
      一旦配置了构建缓存(我认为复制缓存并不明智),似乎就需要在构建脚本中利用它了

      (发件人):

      settings.gradle:

      buildCache {
          remote(HttpBuildCache) {
              url = 'https://example.com:8123/cache/'
          }
      }
      

      根据,compileJava任务是可缓存的,因此不需要在构建中对其进行进一步配置。

      但是。。。您的测试不是用Java编写的吗?还有,你在用什么?即使是这样,也许Gradle需要启动编译任务来进行一些检查?@amanin否,我的测试是用JUnit用Java编写的,也在Linux机器上编译并复制过来的。我没有使用构建缓存。-“也许Gradle需要启动compile任务来进行一些检查”…我认为没有,但我担心你可能是对的。我现在正在安装JDK来测试这一点。是的,但是要执行它们,您仍然需要java。我不明白如果没有安装java,它将如何工作。Gradle告诉您没有找到有效的jre。没有jre,您无法执行java二进制文件。@AmaninJava已正确安装(否则Gradle将根本无法运行)。缺少的是JDK(Gradle错误消息告诉我,它没有在
      JAVA\u HOME
      路径中找到JDK安装,该路径正确设置为
      C:\Program Files\JAVA\jre1.8.0\u 251
      )。@amanin现在测试了这一点;但一旦我将项目指向一个有效的JDK安装,Gradle确实会重新编译它。它不仅仅运行
      compileJava
      进行检查。
      buildCache {
          remote(HttpBuildCache) {
              url = 'https://example.com:8123/cache/'
          }
      }