Skip to content

Find Java version from release file #910

@brunoborges

Description

@brunoborges

The checkJavaVersion function is called whenever a user clicks on a Run or Debug codelens.

The implementation currently relies on executing java -version to identify which JDK version is selected.

Starting with Java 7+, most JDK distributions come with a release file at the top level (JAVA_HOME) location.

It would certainly improve performance here by reading/parsing that static file instead of executing java -version, and only do this in case the release file does not exist.

▶ cd $JAVA_HOME
▶ cat release
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: release
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ IMPLEMENTOR="AdoptOpenJDK"
   2   │ IMPLEMENTOR_VERSION="AdoptOpenJDK"
   3   │ JAVA_VERSION="15"
   4   │ JAVA_VERSION_DATE="2020-09-15"
   5   │ MODULES="java.base java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.logging java.management java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.vm.ci jdk.management jdk.unsupported jdk.internal.vm.compiler jdk.aot jdk.internal.jvmstat jdk.attach jdk.charsets jdk.compiler jdk.crypto.ec jdk.crypto.cryptoki jdk.dynalink jdk.internal.ed jdk.editpad jdk.hotspot.agent jdk.httpserver jdk.incubator.foreign jdk.internal.opt jdk.jdeps jdk.jlink jdk.incubator.jpackage jdk.internal.le jdk.internal.vm.compiler.management jdk.jartool jdk.javadoc jdk.jcmd jdk.management.agent jdk.jconsole jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported.desktop jdk.xml.dom jdk.zipfs"
   6   │ OS_ARCH="x86_64"
   7   │ OS_NAME="Darwin"
   8   │ SOURCE=".:git:1cf34e18a77d"
   9   │ BUILD_SOURCE="git:4dbe027a"
  10   │ FULL_VERSION="15+36"
  11   │ SEMANTIC_VERSION="15+36"
  12   │ BUILD_INFO="OS: Mac OS X Version: 10.14.6 18G84"
  13   │ JVM_VARIANT="Hotspot"
  14   │ JVM_VERSION="15+36"
  15   │ IMAGE_TYPE="JDK"

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions