From 6d803e2f7236db32fc963150c1683e097f453867 Mon Sep 17 00:00:00 2001 From: Norman Breau Date: Sun, 9 May 2021 17:52:35 -0300 Subject: [PATCH] Bugfix/java checks (#1228) * fix: Java version parsing if java executable prints out additional information with --version * fix: Ensure JAVA_HOME path comes first in the PATH environment * refactor: Removed redundent code in favour of keeping a change introduced from another PR --- bin/templates/cordova/lib/env/java.js | 9 ++++----- spec/unit/java.spec.js | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/bin/templates/cordova/lib/env/java.js b/bin/templates/cordova/lib/env/java.js index 2cd720caa7..5343beb846 100644 --- a/bin/templates/cordova/lib/env/java.js +++ b/bin/templates/cordova/lib/env/java.js @@ -93,16 +93,15 @@ const java = { return; } - const javacPath = utils.forgivingWhichSync('javac'); const javaHome = environment.CORDOVA_JAVA_HOME || environment.JAVA_HOME; if (javaHome) { // Ensure that CORDOVA_JAVA_HOME overrides environment.JAVA_HOME = javaHome; - // Windows java installer doesn't add javac to PATH, nor set JAVA_HOME (ugh). - if (!javacPath) { - environment.PATH += path.delimiter + path.join(environment.JAVA_HOME, 'bin'); - } + // Ensure that the JAVA_HOME bin path is before anything else + // to cover cases where different Java versions is in the PATH + environment.PATH = path.join(environment.JAVA_HOME, 'bin') + path.delimiter + environment.PATH; } else { + const javacPath = utils.forgivingWhichSync('javac'); if (javacPath) { // OS X has a command for finding JAVA_HOME. const find_java = '/usr/libexec/java_home'; diff --git a/spec/unit/java.spec.js b/spec/unit/java.spec.js index d19f1b067a..66c8ef216b 100644 --- a/spec/unit/java.spec.js +++ b/spec/unit/java.spec.js @@ -47,9 +47,19 @@ describe('Java', () => { all: 'javac 1.8.0_275' })); - console.log('BEFORE', process.env.JAVA_HOME); const result = await Java.getVersion(); - console.log('AFTER', process.env.JAVA_HOME); + expect(result.major).toBe(1); + expect(result.minor).toBe(8); + expect(result.patch).toBe(0); + expect(result.version).toBe('1.8.0'); + }); + + it('detects JDK when additional details are printed', async () => { + Java.__set__('execa', () => Promise.resolve({ + all: 'Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8\njavac 1.8.0_275' + })); + + const result = await Java.getVersion(); expect(result.major).toBe(1); expect(result.minor).toBe(8); expect(result.patch).toBe(0);