Skip to content

Commit 53ddc0d

Browse files
committed
java.home setting
1 parent aef0344 commit 53ddc0d

5 files changed

Lines changed: 51 additions & 12 deletions

File tree

‎.vscode/settings.json‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,10 @@
3030
"com.kotcrab.remark:remark:jar:1.0.0:compile",
3131
"com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0:compile",
3232
"org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:jar:0.2.0-SNAPSHOT:compile"
33-
]
33+
],
34+
"java.sourceDirectories": [
35+
"src/main/java",
36+
"src/test/java"
37+
],
38+
"java.home": "/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home"
3439
}

‎lib/Main.ts‎

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -153,24 +153,39 @@ function isJava8(javaExecutablePath: string): Promise<boolean> {
153153
resolve(eight);
154154
});
155155
});
156-
}
156+
}
157157

158158
function findJavaExecutable(binname: string) {
159159
binname = correctBinname(binname);
160160

161-
// First search each JAVA_HOME bin folder
162-
if (process.env['JAVA_HOME']) {
163-
let workspaces = process.env['JAVA_HOME'].split(Path.delimiter);
164-
for (let i = 0; i < workspaces.length; i++) {
165-
let binpath = Path.join(workspaces[i], 'bin', binname);
166-
if (FS.existsSync(binpath)) {
167-
return binpath;
168-
}
169-
}
161+
// First search java.home setting
162+
let userJavaHome = VSCode.workspace.getConfiguration('java').get('home') as string;
163+
164+
if (userJavaHome != null) {
165+
console.log('Looking for java in settings java.home ' + userJavaHome + '...');
166+
167+
let candidate = findJavaExecutableInJavaHome(userJavaHome, binname);
168+
169+
if (candidate != null)
170+
return candidate;
171+
}
172+
173+
// Then search each JAVA_HOME
174+
let envJavaHome = process.env['JAVA_HOME'];
175+
176+
if (envJavaHome) {
177+
console.log('Looking for java in environment variable JAVA_HOME ' + envJavaHome + '...');
178+
179+
let candidate = findJavaExecutableInJavaHome(envJavaHome, binname);
180+
181+
if (candidate != null)
182+
return candidate;
170183
}
171184

172185
// Then search PATH parts
173186
if (process.env['PATH']) {
187+
console.log('Looking for java in PATH');
188+
174189
let pathparts = process.env['PATH'].split(Path.delimiter);
175190
for (let i = 0; i < pathparts.length; i++) {
176191
let binpath = Path.join(pathparts[i], binname);
@@ -191,6 +206,17 @@ function correctBinname(binname: string) {
191206
return binname;
192207
}
193208

209+
function findJavaExecutableInJavaHome(javaHome: string, binname: string) {
210+
let workspaces = javaHome.split(Path.delimiter);
211+
212+
for (let i = 0; i < workspaces.length; i++) {
213+
let binpath = Path.join(workspaces[i], 'bin', binname);
214+
215+
if (FS.existsSync(binpath))
216+
return binpath;
217+
}
218+
}
219+
194220
// this method is called when your extension is deactivated
195221
export function deactivate() {
196222
}

‎package.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@
6868
"type": "string"
6969
},
7070
"description": "Java source directories in the workspace"
71+
},
72+
"java.home": {
73+
"type": "string",
74+
"description": "Installation directory of Java 8"
7175
}
7276
}
7377
}

‎src/main/java/org/javacs/JavaSettings.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.ArrayList;
55
import java.util.HashSet;
66
import java.util.List;
7+
import java.util.Optional;
78
import java.util.Set;
89

910
public class JavaSettings {
@@ -12,5 +13,6 @@ public class JavaSettings {
1213
public static class Java {
1314
public List<String> externalDependencies = new ArrayList<>();
1415
public List<Path> sourceDirectories = new ArrayList<>();
16+
public Optional<String> javaHome = Optional.empty();
1517
}
1618
}

‎src/main/java/org/javacs/Main.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ public class Main {
2626
public static final ObjectMapper JSON = new ObjectMapper().registerModule(new Jdk8Module())
2727
.registerModule(new JSR310Module())
2828
.registerModule(pathAsJson())
29-
.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
29+
.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false)
30+
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
31+
.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
3032

3133
private static final Logger LOG = Logger.getLogger("main");
3234

0 commit comments

Comments
 (0)