在 Gradle 构建过程中安装了 JDK
Which installed JDK used during Gradle build process
这是我 gradle -v
的输出(在使用包装器的项目中):
$ ./gradlew -v
------------------------------------------------------------
Gradle 5.0
------------------------------------------------------------
Build time: 2018-11-26 11:48:43 UTC
Revision: 7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987
Kotlin DSL: 1.0.4
Kotlin: 1.3.10
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 11.0.1 (Oracle Corporation 11.0.1+13-LTS)
OS: Linux 3.10.0-862.11.6.el7.x86_64 amd64
尤其是这一行:
JVM: 11.0.1 (Oracle Corporation 11.0.1+13-LTS)
我希望切换到 OpenJDK 11。所以 select 如下所示:
# alternatives --config java
There are 4 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 /usr/java/jdk-11.0.1/bin/java
+ 2 /usr/local/jdk-11.0.1/bin/java
3 /usr/java/jre1.8.0_191-i586/bin/java
4 /usr/java/jdk1.8.0_191-amd64/jre/bin/java
Enter to keep the current selection[+], or type selection number: 2
# java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
但是gradle -v
输出没有区别。所以我在网上搜索并找到了一些方法(参见here):
编辑gradle.properties
文件
使用-Dorg.gradle.java.home
命令行选项
编辑build.gradle
文件
我用的是前两种方式。两者都有效(为了测试我切换到 JDK 8
然后 运行 build
任务。由于我的代码中的一些新功能不受 Java 8 支持,任务失败).但是gradle -v
的结果还是没变!即使使用第二种方式:
# ./gradlew -Dorg.gradle.java.home=/usr/java/jdk1.8.0_191-amd64 -v
------------------------------------------------------------
Gradle 5.0
------------------------------------------------------------
Build time: 2018-11-26 11:48:43 UTC
Revision: 7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987
Kotlin DSL: 1.0.4
Kotlin: 1.3.10
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 11.0.1 (Oracle Corporation 11.0.1+13-LTS)
OS: Linux 3.10.0-862.11.6.el7.x86_64 amd64
所以问题是如何检查build
过程中Gradle使用了哪个JDK版本?
您可以添加一个任务,在执行时打印您需要的内容 (Kotlin DSL):
tasks {
val j by creating {
doLast {
println(System.getProperty("java.home"))
}
}
}
Groovy DSL:
tasks.register("j") {
doLast {
println System.getProperty("java.home")
}
}
然后执行./gradlew j
:
/usr/lib/jvm/java-8-openjdk/jre
为什么 gradlew
可以使用另一个 JVM?看看这个脚本,您会发现它使用 JAVA_HOME
变量来搜索 JVM。因此,PATH
中的版本可能与 JAVA_HOME
指向的版本不同。
我找到了另一种方法(除外)仅当您使用 Gradle 守护程序时:
首先,通过 运行 gradlew --status
找到 PID
守护进程(更多信息参见 here)。示例输出:
PID STATUS INFO
11432 IDLE 5.0
Only Daemons for the current Gradle version are displayed. See https://docs.gradle.org/5.0/userguide/gradle_daemon.html#sec:status
然后用PID
找哪个JDK
用的:
ll /proc/<PID>/exe
示例输出:
lrwxrwxrwx. 1 0xy 0xy 0 Jan 5 04:03 /proc/11432/exe -> /usr/local/jdk-11.0.1/bin/java
在 Windows:
> wmic process where "processId=<PID>" get Name, ProcessID, ExecutablePath
示例输出:
ExecutablePath Name ProcessId
C:\Program Files\Java\openjdk-11.0.1\bin\java.exe java.exe 11432
这是我 gradle -v
的输出(在使用包装器的项目中):
$ ./gradlew -v
------------------------------------------------------------
Gradle 5.0
------------------------------------------------------------
Build time: 2018-11-26 11:48:43 UTC
Revision: 7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987
Kotlin DSL: 1.0.4
Kotlin: 1.3.10
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 11.0.1 (Oracle Corporation 11.0.1+13-LTS)
OS: Linux 3.10.0-862.11.6.el7.x86_64 amd64
尤其是这一行:
JVM: 11.0.1 (Oracle Corporation 11.0.1+13-LTS)
我希望切换到 OpenJDK 11。所以 select 如下所示:
# alternatives --config java
There are 4 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 /usr/java/jdk-11.0.1/bin/java
+ 2 /usr/local/jdk-11.0.1/bin/java
3 /usr/java/jre1.8.0_191-i586/bin/java
4 /usr/java/jdk1.8.0_191-amd64/jre/bin/java
Enter to keep the current selection[+], or type selection number: 2
# java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
但是gradle -v
输出没有区别。所以我在网上搜索并找到了一些方法(参见here):
编辑
gradle.properties
文件使用
-Dorg.gradle.java.home
命令行选项编辑
build.gradle
文件
我用的是前两种方式。两者都有效(为了测试我切换到 JDK 8
然后 运行 build
任务。由于我的代码中的一些新功能不受 Java 8 支持,任务失败).但是gradle -v
的结果还是没变!即使使用第二种方式:
# ./gradlew -Dorg.gradle.java.home=/usr/java/jdk1.8.0_191-amd64 -v
------------------------------------------------------------
Gradle 5.0
------------------------------------------------------------
Build time: 2018-11-26 11:48:43 UTC
Revision: 7fc6e5abf2fc5fe0824aec8a0f5462664dbcd987
Kotlin DSL: 1.0.4
Kotlin: 1.3.10
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 11.0.1 (Oracle Corporation 11.0.1+13-LTS)
OS: Linux 3.10.0-862.11.6.el7.x86_64 amd64
所以问题是如何检查build
过程中Gradle使用了哪个JDK版本?
您可以添加一个任务,在执行时打印您需要的内容 (Kotlin DSL):
tasks {
val j by creating {
doLast {
println(System.getProperty("java.home"))
}
}
}
Groovy DSL:
tasks.register("j") {
doLast {
println System.getProperty("java.home")
}
}
然后执行./gradlew j
:
/usr/lib/jvm/java-8-openjdk/jre
为什么 gradlew
可以使用另一个 JVM?看看这个脚本,您会发现它使用 JAVA_HOME
变量来搜索 JVM。因此,PATH
中的版本可能与 JAVA_HOME
指向的版本不同。
我找到了另一种方法(
首先,通过 运行 gradlew --status
找到 PID
守护进程(更多信息参见 here)。示例输出:
PID STATUS INFO
11432 IDLE 5.0
Only Daemons for the current Gradle version are displayed. See https://docs.gradle.org/5.0/userguide/gradle_daemon.html#sec:status
然后用PID
找哪个JDK
用的:
ll /proc/<PID>/exe
示例输出:
lrwxrwxrwx. 1 0xy 0xy 0 Jan 5 04:03 /proc/11432/exe -> /usr/local/jdk-11.0.1/bin/java
在 Windows:
> wmic process where "processId=<PID>" get Name, ProcessID, ExecutablePath
示例输出:
ExecutablePath Name ProcessId
C:\Program Files\Java\openjdk-11.0.1\bin\java.exe java.exe 11432