【问题标题】:Which installed JDK used during Gradle build process如何检查在 Gradle 构建过程中使用了哪些已安装的 JDK
【发布时间】:2019-05-14 15:38:07
【问题描述】:

这是我对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 的输出没有区别。于是上网搜了一下,找到了一些方法(见here):

  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


    【解决方案1】:

    我找到了另一种方法(@madhead answer 除外)仅适用于您使用 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 
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多