Gradle Java JRE/JDK 和 JAVA_HOME 或 java.home 的问题

Gradle problems with Java JRE/JDK and JAVA_HOME or java.home

Windows 10 OS。我正在使用 Cygwin BASH 控制台到 运行 Gradle.

我已经为此苦苦挣扎了几个小时。关于 SO 的一两个问题似乎与此相关,但我距离理解基本机制以及如何让 Gradle 使用正确的 JDK/JRE.

还有很长的路要走

这在 gradle 构建失败并抱怨找不到 "tools.jar" 时开始。这似乎是一个标志,表明用于 运行 Gradle 应用程序的 Java JRE 的路径未与 JDK 相关联。确实是这样:它坚持用来启动的JRE在"C:\Program Files\Java\jre1.8.0_73\"。这是一个没有 JDK.

的 JRE

我想让Gradle使用的JDK在"D:\apps\Java\jdk1.8.0_191\"。

我已将 JAVA_HOME 设置为此值。我还将 "D:\apps\Java\jdk1.8.0_191\bin\" 放在了 PATH 环境变量的开头。

在 Cygwin 和 W10 控制台中,当我进入 "java -version" 它打印出 1.8.0_191 版本,证明 OS 系统已按预期配置。

但是Gradle自己坚持要在C:中使用JRE。
我尝试了无数次实验并重新启动了无数次。 我去的时候,在build.gradle:

println "java.home is ${System.properties['java.home']}"

...它总是打印出 C:\ 位置版本 (1.8.0_73)

最后我通过将 "C:\Program Files\Java\" 重命名为 "C:\Program Files\JavaXXX\" 使这不可能。然后给出:

Chris@M15B /cygdrive/d/My Documents/software projects/EclipseWorkspace/LuceneIndexer_3
$ gradle build Error: could not open `C:\Program Files\Java\jre1.8.0_73\lib\amd64\jvm.cfg'

因此,据我推测,Gradle 内部的某些东西似乎已经顽固地使用特定的 JRE 位置...这忽略了 JAVA_HOME 变量, PATH 条目和 OS 自己对应该使用哪个 JDK/JRE 的理解......甚至将系统设置 java.home 设置为 "spurious" 设置(或一个我不想用的)。

最后...我把这行放在 gradle.properties:

org.gradle.java.home=D:\apps\Java\jdk1.8.0_191

当我将 "C:\Program Files\JavaXXX\" 改回 "C:\Program Files\Java\" 时,终于可以正常构建了。最后 java.home 被打印为 "D:\apps\Java\jdk1.8.0_191"。但是当我再次重命名为 "C:\Program Files\JavaXXX\" 时,返回 "could not open" 错误。换句话说,即使您可以在 Gradle 中配置 java.home,Gradle 本身似乎依赖于您不希望它使用的 Java 版本,这不是配置 OS 的版本!

Gradle 应用程序究竟如何找到它要用来开展业务的 JRE?一定有办法让它使用另一个吗?

以后

我还尝试在 gradle 启动脚本中添加一些 ECHO 语句...其中有一个特定部分专门用于确定要使用的 JVM。这些实验清楚地表明该脚本正确地使用了所需的 JDK(在 D: 下)。它也不可能是与 Cygwin 相关的问题,因为当 Java\ 重命名为 Java_XXX 时,其他 Cygwin 命令工作正常。我还检查了注册表:没有发现任何线索。 通过在 Cygwin 命令提示符下进入 "gradle",即使在 gradle 启动脚本 运行...

我可以通过升级系统的 Java 和 Gradle 来解决这个问题。我改为 Java 9(尽管在撰写本文时显然我们在 Java 11)。我也改为 Gradle 5.2.1(从 3.5)。我想我得出的结论是 Gradle 3.5 与 Java 9...

不兼容

我很困惑:有那么一会儿,Cygwin 似乎已经过时了,我需要更新版本的 its Gradle。但实际上 Cygwin 从 W10 继承了 PATH,其中一个 PATH 条目是“%GRADLE_HOME%\bin”。 Cygwin 使用的是 W10 Gradle。使用 Windoze 多有趣OS!

GRADLE_HOME(不同于GRADLE_USER_HOME,下载依赖项!)因此必须更改为新版本的位置Gradle。

Eclipse 随之而来的各种有趣的后果:可怕的红色感叹号...由于以下事实造成的 "Project and External Dependencies" 对于几个项目,依赖项显示它们自己位于旧的 3.5 GRADLE_USER_HOME 位置,我故意重命名以使其无法访问。我发现无法在 Eclipse 中 "rebuild" 这些依赖项(即强制使用 GRADLE_USER_HOME,现在指向 ...5.2.1 下的位置),而是选择重新创建 Eclipse 项目。

很努力。当然还有更好的方法。

顺便说一下,当您在 Cygwin 中 运行 一个 Gradle 命令时,在 "Java Control Panel" 中为您的 OS 配置的 JVM 在gradle 启动脚本是 运行(...我认为)。即使您的 JAVA_HOME 设置和第一个 PATH 条目指向不同的 JRE(它们可能不应该是)。