Gradle 构建过程中使用了哪个已安装的 JDK

问题描述 投票:0回答:3

这是我的输出

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。因此选择它,如下所示:

# 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
输出没有区别。所以我在网上搜索并找到了一些方法(参见这里):

  1. 编辑

    gradle.properties
    文件

  2. 使用

    -Dorg.gradle.java.home
    命令行选项

  3. 编辑

    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版本?

java gradle version gradlew
3个回答
11
投票

您可以添加一个任务,在执行时打印您需要的内容(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
所指向的版本不同。


8
投票

我找到了另一种方法(除了@madhead回答仅适用于当您使用Gradle守护进程时

首先,通过运行

PID
找到守护进程的
gradlew --status
(有关更多信息,请参阅 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 

0
投票

@madhead回答类似,也可以配置Gradle以在每个执行任务的构建过程中显示使用的JDK(Java)版本(包括启动的任务名称)。

Groovy DSL:

tasks.configureEach {
    t -> t.doFirst {
            println("Task $name started driven by " + System.getProperty("java.home").toString())
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.