Skip to content

Commit 0328a62

Browse files
committed
Support starting the Java Language Server with JDK 9. Fixes eclipse-jdtls#43
Signed-off-by: Fred Bricon <[email protected]>
1 parent b908ac6 commit 0328a62

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/extension.ts

+7
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ function runJavaServer() : Thenable<StreamInfo> {
4141
// suspend=y is the default. Use this form if you need to debug the server startup code:
4242
// params.push('-agentlib:jdwp=transport=dt_socket,server=y,address=1044');
4343
}
44+
if (requirements.java_version > 8) {
45+
params.push('--add-modules=ALL-SYSTEM');
46+
params.push('--add-opens');
47+
params.push('java.base/java.util=ALL-UNNAMED');
48+
params.push('--add-opens');
49+
params.push('java.base/java.lang=ALL-UNNAMED');
50+
}
4451
params.push('-Declipse.application=org.eclipse.jdt.ls.core.id1');
4552
params.push('-Dosgi.bundles.defaultStartLevel=4');
4653
params.push('-Declipse.product=org.eclipse.jdt.ls.core.product');

src/requirements.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const JAVAC_FILENAME = 'javac' + (isWindows?'.exe':'');
1414

1515
interface RequirementsData {
1616
java_home: string;
17+
java_version: number;
1718
}
1819

1920
interface ErrorData {
@@ -31,9 +32,9 @@ interface ErrorData {
3132
*/
3233
export async function resolveRequirements(): Promise<RequirementsData> {
3334
let java_home = await checkJavaRuntime();
34-
await checkJavaVersion(java_home);
35+
let javaVersion = await checkJavaVersion(java_home);
3536
await checkServerInstalled();
36-
return Promise.resolve({ 'java_home': java_home });
37+
return Promise.resolve({ 'java_home': java_home, 'java_version': javaVersion});
3738
}
3839

3940
function checkJavaRuntime(): Promise<any> {
@@ -81,11 +82,13 @@ function readJavaConfig() : string {
8182
function checkJavaVersion(java_home: string): Promise<any> {
8283
return new Promise((resolve, reject) => {
8384
cp.execFile(java_home + '/bin/java', ['-version'], {}, (error, stdout, stderr) => {
84-
if (stderr.indexOf('1.8') < 0){
85+
if (stderr.indexOf('version "9') > -1){
86+
resolve(9);
87+
} if (stderr.indexOf('1.8') < 0){
8588
openJDKDownload(reject, 'Java 8 is required to run. Please download and install a JDK 8.');
8689
}
8790
else{
88-
resolve(true);
91+
resolve(8);
8992
}
9093
});
9194
});

0 commit comments

Comments
 (0)