@@ -13,17 +13,14 @@ type JvmTarget = { pid: string, name: string, interceptedByProxy: number | undef
1313
1414// Check that Java is present, and that it's compatible with agent attachment:
1515const javaBinPromise : Promise < string | false > = ( async ( ) => {
16+ // Check what Java binaries might exist:
1617 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 [ ] ;
2724
2825 // Run a self test in parallel with each of them:
2926 const javaTestResults = await Promise . all ( javaBinPaths . map ( async ( possibleJavaBin ) => ( {
@@ -57,6 +54,16 @@ const javaBinPromise: Promise<string | false> = (async () => {
5754 return false ;
5855} ) ;
5956
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:
6067function testJavaBin ( possibleJavaBin : string ) {
6168 return Promise . race ( [
6269 spawnToResult (
0 commit comments