vscode-java
vscode-java copied to clipboard
can not set different jdk versions for different folder projects in the same workspace
[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
- [step 1] Add two normal projects with two different JDK versions to the same workspace.
- [step 2] command+shift+p -> configure java runtime
- [step 3] set different jdk version。
- 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

Expected Result
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
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