OpenJDK 18 - JAVAC Fails this check
Issue Description
ns doctor or ns build android will fail on later versions of OpenJDK installations (basically failing to detect that it is installed, because the version check fails to get a number version). Giving you an error message about javac not installed or JAVA_HOME not being set.
This line has the failing regex.
https://github.com/NativeScript/nativescript-cli/blob/e44ca94cce733be5925988d07a8f99e0acc692c9/packages/doctor/src/sys-info.ts#L15
Replaced in my local copy with:
SysInfo.JAVA_COMPILER_VERSION_REGEXP = /^javac (\d*)/im;
Changed the (.*) to (\d*) meaning grab all numbers...
Reproduction
- Install Ubuntu 22.04,
- install OpenJDK 18,
- install NativeScript,
- run
NS doctor
Relevant log output (if applicable)
No response
Environment
echo $JAVA_HOME -> /usr/lib/jvm/java-18-openjdk-amd64
javac -version -> javac 18-ea
OS: Linux 5.17 Pop!_OS 22.04 LTS Shell: /bin/bash node: 16.15.0 npm: 8.5.5 nativescript: 8.2.3
android
java: javac 18-ea ndk: Not Found apis: 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 build_tools: 30.0.0, 30.0.3, 33.0.0, 33.0.0
Please accept these terms
- [X] I have searched the existing issues as well as StackOverflow and this has not been posted before
- [X] This is a bug report
- [X] I agree to follow this project's Code of Conduct
We have improvements to the doctor setup in the pipeline, however do note that Java 18 is not officially supported by gradle:
A Java version between 8 and 17 is required to execute Gradle. Java 18 and later versions are not yet supported.
Source: https://docs.gradle.org/current/userguide/compatibility.html
Yes, wasn't aware of that -- I also have some older versions of JDK/JRE installed which Gradle was automatically using. The only issue was NS itself as it runs the test using the latest and didn't understand the -ea as part of the version. ;-)