vscode-java icon indicating copy to clipboard operation
vscode-java copied to clipboard

can not set different jdk versions for different folder projects in the same workspace

Open np7sky opened this issue 3 years ago • 1 comments

[In vscode, how to set different jdk versions for different folder projects in the same workspace]see this issue

Environment
  • Operating System: macOS 12.4 (21F79)
  • JDK version: 8 or 17
  • Visual Studio Code version: 1.68.1 (Universal)
  • Java extension version: Extension Pack for Java v0.24.0
Steps To Reproduce
  1. [step 1] Add two normal projects with two different JDK versions to the same workspace.
  2. [step 2] command+shift+p -> configure java runtime
  3. [step 3] set different jdk version。
  4. The java version is always automatically set to the same.

[Please attach a sample project reproducing the error] Please attach logs

Current Result

configure java runtime png 2022-07-06 13 04 24

Expected Result
2022-07-06 13 50 52
Additional Informations

Developer: Toggle Developer Tools console log

Access to XMLHttpRequest at 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery' from origin 'vscode-file://vscode-app' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
workbench.desktop.main.js:597   ERR RequestService#request (browser) - error https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery Error: XHR failed
    at XMLHttpRequest.v.onerror (vscode-file://vscode-app/Applications/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:83:27645)
marketplace.visualstudio.com/_apis/public/gallery/extensionquery:1          Failed to load resource: net::ERR_FAILED
workbench.desktop.main.js:71 [Extension Host] 6 Jul 13:29:14 - Proposed protocol extensions loaded!
workbench.desktop.main.js:597   ERR Connection got disposed.: Error: Connection got disposed.
	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1126161)
	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973103)
	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973291)
	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1046964)
	at t (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:971405)
	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)
	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)
	at Q (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1115300)
	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)
	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)
	at g.fireClose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1139993)
	at Socket.<anonymous> (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1140778)
	at Socket.emit (node:events:390:28)
	at Pipe.<anonymous> (node:net:687:12)
workbench.desktop.main.js:71 [Extension Host] rejected promise not handled within 1 second: Error: Connection got disposed.
I @ workbench.desktop.main.js:71
workbench.desktop.main.js:71 [Extension Host] stack trace: Error: Connection got disposed.	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1126161)	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973103)	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973291)	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1046964)	at t (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:971405)	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)	at Q (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1115300)	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)	at g.fireClose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1139993)	at Socket.<anonymous> (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1140778)	at Socket.emit (node:events:390:28)	at Pipe.<anonymous> (node:net:687:12)
I @ workbench.desktop.main.js:71
workbench.desktop.main.js:2693 [[object Object]]Connection got disposed.
$onExtensionRuntimeError @ workbench.desktop.main.js:2693
workbench.desktop.main.js:2693 Error: Connection got disposed.
	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1126161)
	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973103)
	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973291)
	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1046964)
	at t (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:971405)
	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)
	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)
	at Q (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1115300)
	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)
	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)
	at g.fireClose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1139993)
	at Socket.<anonymous> (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1140778)
	at Socket.emit (node:events:390:28)
	at Pipe.<anonymous> (node:net:687:12)

shift+command+u output-log(window)

[2022-07-06 13:29:11.639] [renderer1] [error] RequestService#request (browser) - error https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery {}
[2022-07-06 13:29:14.774] [renderer1] [error] Connection got disposed.: Error: Connection got disposed.
	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1126161)
	at Object.dispose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973103)
	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:973291)
	at w.handleConnectionClosed (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1046964)
	at t (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:971405)
	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)
	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)
	at Q (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1115300)
	at invoke (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1127787)
	at s.fire (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1128548)
	at g.fireClose (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1139993)
	at Socket.<anonymous> (/Users/elewen/.vscode/extensions/redhat.java-1.8.0-darwin-x64/dist/extension.js:2:1140778)
	at Socket.emit (node:events:390:28)
	at Pipe.<anonymous> (node:net:687:12)

Java: Open Java Language Server log file

/Users/elewen/Library/Application Support/Code/User/workspaceStorage/675d040fc0c43fc966d08bd8b269c960/redhat.java/jdt_ws/.metadata/.log

logfile Java Language Server log file.log

np7sky avatar Jul 06 '22 05:07 np7sky

That's because the setting java.configuration.runtimes in JDTLS is globally effective. Though its scope is machine-overridable, it won't take effect if you set different values for different workspace folders.

java.configuration.runtimes defines mappings of language levels and JDK distributions, which is globally effective. We are lacking the ability to set different runtimes even for different workspace. E.g. Below case is impossible for the moment:

  • Workspace A: uses Redhat's OpenJDK 17, JAVASE-1.8
  • Workspace B: uses Microsoft's OpenJDK 11, JAVASE-1.8

@CsCherrYY It's just the case we discussed before. One option is to re-define this setting as a collection of pairs of JDK distro and language level. E.g. make "java.configuration.runtimes" machine-scoped, and add a new setting like java.default.runtime referencing one of above runtimes using a unique name.

"java.configuration.runtimes": [
    {
        "name": "Java 8 with JDK 17",
        "level": "JavaSE-1.8",
        "path": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.1.12-hotspot"
    },
    {
        "name": "my-JDK17",
        "level": "JavaSE-17",
        "path": "C:\\Program Files\\Eclipse Adoptium\\jdk-17.0.1.12-hotspot",
    }
],

"java.default.runtime": "my-JDK17"

//cc @testforstephen @rgrunber

Eskibear avatar Jul 06 '22 08:07 Eskibear