@@ -13,17 +13,14 @@ type JvmTarget = { pid: string, name: string, interceptedByProxy: number | undef
13
13
14
14
// Check that Java is present, and that it's compatible with agent attachment:
15
15
const javaBinPromise : Promise < string | false > = ( async ( ) => {
16
+ // Check what Java binaries might exist:
16
17
const javaBinPaths = [
17
- // Check what Java binaries might exist:
18
- ...( ! ! process . env . JAVA_HOME // $JAVA_HOME/bin/java is preferable
19
- ? [ path . join ( process . env . JAVA_HOME ! ! , 'bin' , 'java' ) ]
20
- : [ ]
21
- ) ,
22
- ...( await commandExists ( 'java' ) // but any other Java in $PATH will do
23
- ? [ 'java' ]
24
- : [ ]
25
- )
26
- ] ;
18
+ await getMacJavaHome ( ) , // Magic Mac helper for exactly this
19
+ ! ! process . env . JAVA_HOME && // $JAVA_HOME/bin/java is standard
20
+ path . join ( process . env . JAVA_HOME ! ! , 'bin' , 'java' ) ,
21
+ ( await commandExists ( 'java' ) ) && // Fallback to java in $PATH
22
+ 'java'
23
+ ] . filter ( p => ! ! p ) as string [ ] ;
27
24
28
25
// Run a self test in parallel with each of them:
29
26
const javaTestResults = await Promise . all ( javaBinPaths . map ( async ( possibleJavaBin ) => ( {
@@ -57,6 +54,16 @@ const javaBinPromise: Promise<string | false> = (async () => {
57
54
return false ;
58
55
} ) ;
59
56
57
+ // Try to use use Mac's java_home helper (available since 10.5 apparently)
58
+ async function getMacJavaHome ( ) {
59
+ if ( ! await commandExists ( '/usr/libexec/java_home' ) ) return ;
60
+
61
+ const result = await spawnToResult ( '/usr/libexec/java_home' , [ '-v' , '1.9+' ] ) ;
62
+ if ( result . exitCode != 0 ) return ;
63
+ else return path . join ( result . stdout . trim ( ) , 'bin' , 'java' ) ;
64
+ }
65
+
66
+ // Test a single binary, with a timeout:
60
67
function testJavaBin ( possibleJavaBin : string ) {
61
68
return Promise . race ( [
62
69
spawnToResult (
0 commit comments