Java 如何在不同的机器上运行Gradle测试而不重新编译?
我正在尝试设置一个Windows测试服务器,以便通过SSH运行Java库项目的单元测试。实际构建发生在Linux服务器上 因此,我希望能够将预构建的项目复制到Windows计算机,并在其上运行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失败
\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/'
}
}