@@ -153,24 +153,39 @@ function isJava8(javaExecutablePath: string): Promise<boolean> {
153153 resolve ( eight ) ;
154154 } ) ;
155155 } ) ;
156- }
156+ }
157157
158158function 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
195221export function deactivate ( ) {
196222}
0 commit comments