From 9616b66de4060f47671994627ee92f0e639c3193 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Thu, 25 Mar 2021 17:33:14 -0400 Subject: [PATCH] Wrong JDK error message in VSCode --- .../jvm-launch-utils/package-lock.json | 34 ++++++++- nodejs-packages/jvm-launch-utils/package.json | 2 +- .../jvm-launch-utils/src/jvm-util.ts | 72 +++---------------- .../commons-vscode/package-lock.json | 14 ++-- vscode-extensions/commons-vscode/package.json | 2 +- .../commons-vscode/src/launch-util.ts | 7 +- .../vscode-spring-boot/package-lock.json | 32 ++++----- 7 files changed, 74 insertions(+), 89 deletions(-) diff --git a/nodejs-packages/jvm-launch-utils/package-lock.json b/nodejs-packages/jvm-launch-utils/package-lock.json index 1459cba91..8efcdca65 100644 --- a/nodejs-packages/jvm-launch-utils/package-lock.json +++ b/nodejs-packages/jvm-launch-utils/package-lock.json @@ -1,8 +1,38 @@ { "name": "@pivotal-tools/jvm-launch-utils", - "version": "0.0.13", - "lockfileVersion": 1, + "version": "0.0.14", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@pivotal-tools/jvm-launch-utils", + "version": "0.0.14", + "license": "MIT", + "devDependencies": { + "@types/node": "^9.4.6", + "typescript": "^2.7.2" + } + }, + "node_modules/@types/node": { + "version": "9.6.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.39.tgz", + "integrity": "sha512-c3OkjgNpSMdHan56WhklP0FMOk5ocilKz2Mpa0NOGzu8jw5YERjCf9FG0epYB1+TxScv/oI4uJ204u2mUg7Hcw==", + "dev": true + }, + "node_modules/typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, "dependencies": { "@types/node": { "version": "9.6.39", diff --git a/nodejs-packages/jvm-launch-utils/package.json b/nodejs-packages/jvm-launch-utils/package.json index 721071ce7..b17bffd07 100644 --- a/nodejs-packages/jvm-launch-utils/package.json +++ b/nodejs-packages/jvm-launch-utils/package.json @@ -1,6 +1,6 @@ { "name": "@pivotal-tools/jvm-launch-utils", - "version": "0.0.14", + "version": "0.0.15", "description": "Provides utilities useful for launching Java processes from node packages.", "files": [ "src", diff --git a/nodejs-packages/jvm-launch-utils/src/jvm-util.ts b/nodejs-packages/jvm-launch-utils/src/jvm-util.ts index 3f6765a14..77959da08 100644 --- a/nodejs-packages/jvm-launch-utils/src/jvm-util.ts +++ b/nodejs-packages/jvm-launch-utils/src/jvm-util.ts @@ -1,7 +1,6 @@ import * as FS from 'fs'; import * as Path from 'path'; import * as ChildProcess from 'child_process'; -import { basename } from 'path'; 'use strict'; @@ -10,7 +9,7 @@ export interface JVM { * 8 = Java 1.8.x, 9 = Java 9.x, etc */ getMajorVersion() : number - + /** * Path to the Java executable */ @@ -26,19 +25,8 @@ export interface JVM { */ isJdk() : boolean - /** - * Find tools.jar for this JVM. - * - * Note that if the JVM is a JRE; or a Java 9 or above JDK; - * then this will return null. - */ - getToolsJar() : string | null - /** * Launch an executable jar with this jvm. - * This autmatically adds tools.jar to the classpath if available. - * WARNING: For adding tools jar to work properly, the jar must be packaged - * using spring-boot-maven-plugin ZIP layout. */ jarLaunch(jar: string, vmargs?: string[], execFileOptions?: ChildProcess.ExecFileOptions) : ChildProcess.ChildProcess @@ -47,10 +35,10 @@ export interface JVM { /** * Find a JVM by looking in the JAVA_HOME and PATH environment variables. - * + * * Optionally, a specific javaHome can be passed in. This shortcuts the * search logic and uses that javaHome as is. - * + * * The returned JVM may or may not be a JDK. Methods are provided to obtain corresponding * toolsjar and to check whether the JVM is a JDK. */ @@ -59,8 +47,8 @@ export function findJvm(javaHome?: string) : Promise { let javaExe = findJavaExe(javaHome); if (javaExe) { return getJavaInfo(javaExe).then(javaProps => new JVMImpl( - javaProps.get("java.home"), - javaExe, + javaProps.get("java.home"), + javaExe, getMajorVersion(javaProps) )); } @@ -72,7 +60,7 @@ export function findJvm(javaHome?: string) : Promise { /** * Like findJvm, but additionally, if the found JVM is not a JDK tries to - * find a companion JDK that may be installed alongside it. + * find a companion JDK that may be installed alongside it. */ export function findJdk(javaHome?: string) : Promise { return findJvm(javaHome).then(jvm => { @@ -82,10 +70,10 @@ export function findJdk(javaHome?: string) : Promise { if (!jvm.isJdk()) { console.log("found jvm is not a JDK"); - //Try to find a 'sibling' JDK. + //Try to find a 'sibling' JDK. //Mainly for windows where it is common to have side-by-side install of a jre and jdk, instead of a //nested jre install inside of a jdk. - + //E.g. //C:\ProgramFiles\Java\jdk1.8.0_161 //C:\ProgramFiles\Java\jre1.8.0_161 @@ -136,7 +124,7 @@ function findJavaExe(javaHome?: string) : string | null { } } - for (var searchPath of process.env['PATH'].split(Path.delimiter)) { + for (let searchPath of process.env['PATH'].split(Path.delimiter)) { let javaExe = Path.resolve(searchPath, binName); if (FS.existsSync(javaExe)) { //Resolve symlinks @@ -160,42 +148,20 @@ function memoize(getter : Getter) : Getter { }; } -const TOOLS_JAR_PATHS : string[][] = [ - ["lib", "tools.jar"], - ["..", "lib", "tools.jar"] -]; - class JVMImpl implements JVM { javaHome : string javaExe : string version : number - toolsJar: () => string | null; constructor(javaHome : string, javaExe : string, version : number) { this.javaHome = javaHome; this.javaExe = javaExe; this.version = version; - this.toolsJar = memoize(() => this.findToolsJar()); } getJavaHome() : string { return this.javaHome; } - findToolsJar() : string | null { - if (this.version>=9) { - return null; - } - let javaHome = this.getJavaHome(); - for (var tjp of TOOLS_JAR_PATHS) { - let toolsJar = Path.resolve(javaHome, ...tjp); - if (FS.existsSync(toolsJar)) { - return toolsJar; - } - } - //Not found. - return null; - } - getMajorVersion() { return this.version; } @@ -203,22 +169,10 @@ class JVMImpl implements JVM { return this.javaExe; } isJdk(): boolean { - //Consider memoizing? - if (this.version<9) { - return this.getToolsJar()!=null; - } else { - return FS.existsSync(Path.resolve(this.getJavaHome(), "jmods", "jdk.management.jmod")); - } - } - getToolsJar(): string { - return this.toolsJar(); + return FS.existsSync(Path.resolve(this.getJavaHome(), "jmods", "jdk.management.jmod")); } jarLaunch(jar: string, vmargs?: [string], execFileOptions?: ChildProcess.ExecFileOptions): ChildProcess.ChildProcess { let args = []; - let toolsJar = this.getToolsJar(); - if (toolsJar) { - args.push("-Dloader.path="+toolsJar); - } if (vmargs) { args.push(...vmargs); } @@ -232,10 +186,6 @@ class JVMImpl implements JVM { // Classpath args.push('-cp'); let classpathStr = classpath.join(Path.delimiter); - const toolsJar = this.getToolsJar(); - if (toolsJar) { - classpathStr += Path.delimiter + toolsJar; - } args.push(classpathStr); // JVM Arguments @@ -298,4 +248,4 @@ function correctBinname(binname: string) { return binname + '.exe'; else return binname; -} \ No newline at end of file +} diff --git a/vscode-extensions/commons-vscode/package-lock.json b/vscode-extensions/commons-vscode/package-lock.json index fee0a1fd6..46442d4fc 100644 --- a/vscode-extensions/commons-vscode/package-lock.json +++ b/vscode-extensions/commons-vscode/package-lock.json @@ -9,7 +9,7 @@ "version": "0.2.4", "license": "MIT", "dependencies": { - "@pivotal-tools/jvm-launch-utils": "0.0.14", + "@pivotal-tools/jvm-launch-utils": "0.0.15", "deep-equal": "^1.0.1", "portfinder": "^1.0.25" }, @@ -25,9 +25,9 @@ } }, "node_modules/@pivotal-tools/jvm-launch-utils": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.14.tgz", - "integrity": "sha512-SndeImJC7YBX5qmwDQQKiW0abUpV9ffVT2CYFaVusgWLaZnkDn9hv5eb0b6W+O/z7mh2Qm8s8Cdzb3OPGGS3/Q==" + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.15.tgz", + "integrity": "sha512-AjZ+yVJ3zvM9SLno+OhxeYbNNhAZWHf/VfLO9D9w3Um/WGKJ/8DhTQ2VTV9uBm5gYFZWUeOEV+bvS4dBn7cYPg==" }, "node_modules/@types/node": { "version": "12.20.6", @@ -375,9 +375,9 @@ }, "dependencies": { "@pivotal-tools/jvm-launch-utils": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.14.tgz", - "integrity": "sha512-SndeImJC7YBX5qmwDQQKiW0abUpV9ffVT2CYFaVusgWLaZnkDn9hv5eb0b6W+O/z7mh2Qm8s8Cdzb3OPGGS3/Q==" + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.15.tgz", + "integrity": "sha512-AjZ+yVJ3zvM9SLno+OhxeYbNNhAZWHf/VfLO9D9w3Um/WGKJ/8DhTQ2VTV9uBm5gYFZWUeOEV+bvS4dBn7cYPg==" }, "@types/node": { "version": "12.20.6", diff --git a/vscode-extensions/commons-vscode/package.json b/vscode-extensions/commons-vscode/package.json index d8b1f3120..e3084a333 100644 --- a/vscode-extensions/commons-vscode/package.json +++ b/vscode-extensions/commons-vscode/package.json @@ -24,7 +24,7 @@ "prepack": "tsc -p ./" }, "dependencies": { - "@pivotal-tools/jvm-launch-utils": "0.0.14", + "@pivotal-tools/jvm-launch-utils": "0.0.15", "deep-equal": "^1.0.1", "portfinder": "^1.0.25" }, diff --git a/vscode-extensions/commons-vscode/src/launch-util.ts b/vscode-extensions/commons-vscode/src/launch-util.ts index 71a6f5691..29b55dade 100644 --- a/vscode-extensions/commons-vscode/src/launch-util.ts +++ b/vscode-extensions/commons-vscode/src/launch-util.ts @@ -132,7 +132,12 @@ export function activate(options: ActivatorOptions, context: VSCode.ExtensionCon let version = jvm.getMajorVersion(); if (version<11) { - VSCode.window.showErrorMessage('Java-based Language Server requires Java 11 or higher (using ' + javaExecutablePath + ')', {}); + VSCode.window.showErrorMessage( + `Spring Tools Language Server requires Java 11 or higher to be launched. Current Java ${javaExecutablePath}.\n + \n + (Note Java 8 can still be used in your own projects. Java 11 is only required to launch the Spring Tools Language Server process)`, + {} + ); return; } log("isJavaEightOrHigher => true"); diff --git a/vscode-extensions/vscode-spring-boot/package-lock.json b/vscode-extensions/vscode-spring-boot/package-lock.json index 7c6ff1527..44cd8ab7c 100644 --- a/vscode-extensions/vscode-spring-boot/package-lock.json +++ b/vscode-extensions/vscode-spring-boot/package-lock.json @@ -26,10 +26,10 @@ "node_modules/@pivotal-tools/commons-vscode": { "version": "0.2.4", "resolved": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.4.tgz", - "integrity": "sha512-Dv1DEOl9C60bqzdFyvFDU/lj28/B2BZvK4WUF3Mitfdr6LEMo+Z5h1EaG3bJFU/SJ9hB/K8OP6n5kBNW2FUnUw==", + "integrity": "sha512-4KQmORBEzxwcwMWUOZannZYc/cHawK8whE8uCsq01quFrw76awoKA1AORgJGq4jvJzMhVEfzPm8lUYjH2xDg2A==", "license": "MIT", "dependencies": { - "@pivotal-tools/jvm-launch-utils": "0.0.14", + "@pivotal-tools/jvm-launch-utils": "0.0.15", "deep-equal": "^1.0.1", "portfinder": "^1.0.25" }, @@ -39,9 +39,9 @@ } }, "node_modules/@pivotal-tools/jvm-launch-utils": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.14.tgz", - "integrity": "sha512-SndeImJC7YBX5qmwDQQKiW0abUpV9ffVT2CYFaVusgWLaZnkDn9hv5eb0b6W+O/z7mh2Qm8s8Cdzb3OPGGS3/Q==" + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.15.tgz", + "integrity": "sha512-AjZ+yVJ3zvM9SLno+OhxeYbNNhAZWHf/VfLO9D9w3Um/WGKJ/8DhTQ2VTV9uBm5gYFZWUeOEV+bvS4dBn7cYPg==" }, "node_modules/@types/node": { "version": "12.20.6", @@ -930,9 +930,9 @@ } }, "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -991,17 +991,17 @@ "dependencies": { "@pivotal-tools/commons-vscode": { "version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.4.tgz", - "integrity": "sha512-Dv1DEOl9C60bqzdFyvFDU/lj28/B2BZvK4WUF3Mitfdr6LEMo+Z5h1EaG3bJFU/SJ9hB/K8OP6n5kBNW2FUnUw==", + "integrity": "sha512-4KQmORBEzxwcwMWUOZannZYc/cHawK8whE8uCsq01quFrw76awoKA1AORgJGq4jvJzMhVEfzPm8lUYjH2xDg2A==", "requires": { - "@pivotal-tools/jvm-launch-utils": "0.0.14", + "@pivotal-tools/jvm-launch-utils": "0.0.15", "deep-equal": "^1.0.1", "portfinder": "^1.0.25" } }, "@pivotal-tools/jvm-launch-utils": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.14.tgz", - "integrity": "sha512-SndeImJC7YBX5qmwDQQKiW0abUpV9ffVT2CYFaVusgWLaZnkDn9hv5eb0b6W+O/z7mh2Qm8s8Cdzb3OPGGS3/Q==" + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@pivotal-tools/jvm-launch-utils/-/jvm-launch-utils-0.0.15.tgz", + "integrity": "sha512-AjZ+yVJ3zvM9SLno+OhxeYbNNhAZWHf/VfLO9D9w3Um/WGKJ/8DhTQ2VTV9uBm5gYFZWUeOEV+bvS4dBn7cYPg==" }, "@types/node": { "version": "12.20.6", @@ -1700,9 +1700,9 @@ }, "dependencies": { "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" }