From 911da515c862206208a46efce075af53da4efac3 Mon Sep 17 00:00:00 2001 From: jsdevel Date: Fri, 20 Dec 2013 02:04:36 -0700 Subject: [PATCH 1/3] closes #94: Don't require JAVA_HOME to be set prior to install. --- package.json | 6 ++- preinstall.js | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 preinstall.js diff --git a/package.json b/package.json index bcbd2d19..929fe0b2 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "url": "https://github.com/joeferner/node-java.git" }, "dependencies": { + "find-java-home": "" }, "devDependencies": { "nodeunit": "~0.6.4", @@ -33,7 +34,8 @@ "async": "~0.1.22" }, "scripts": { - "test": "nodeunit test" + "test": "nodeunit test", + "preinstall": "node preinstall.js" }, "main": "./index.js" -} +} \ No newline at end of file diff --git a/preinstall.js b/preinstall.js new file mode 100644 index 00000000..b45dbd24 --- /dev/null +++ b/preinstall.js @@ -0,0 +1,109 @@ +var FIND_JAVA_HOME_INSTALL_FAILED = 1; +var JAVA_HOME_NOT_FOUND = 2; +var BUILDING_NODE_JAVA_FAILED = 3; + +var packageJSON = require('./package.json'); + +var fs = require('fs'); +var path = require('path'); +var spawn = require('child_process').spawn; +var stdio = [process.stdin, process.stdout, process.stderr]; +var update; + +removePreinstall(); + +log("Preparing to install find-java-home."); + +update = spawn( + 'npm' + , ['install', 'find-java-home'] + , { + cwd:__dirname + , stdio:stdio + } +); + +update.on('error', function(err){ + exit(err, FIND_JAVA_HOME_INSTALL_FAILED); +}); + +update.on('close', function(code){ + if(code)return exit( + "Failed to install find-java-home. the given code was: "+code + , FIND_JAVA_HOME_INSTALL_FAILED + ); + + + log("Preparing to find JAVA_HOME"); + require('find-java-home')(function(err, home){ + var build; + if(err)return exit(err, JAVA_HOME_NOT_FOUND); + + + log("JAVA_HOME determined to be: "+home); + log("Preparing to install node-java"); + build = spawn( + 'npm' + , ['install'] + , { + cwd:__dirname + , stdio:stdio + , 'env' :{ + HOME:process.env.HOME, + JAVA_HOME:home, + USERPROFILE:process.env.USERPROFILE + } + } + ); + + build.on('error', function(err){ + restorePreinstall(); + exit(err, BUILDING_NODE_JAVA_FAILED); + }); + + build.on('close', function(code){ + restorePreinstall(); + if(code)return exit( + "Failed to build node-java. the given code was: "+code + , BUILDING_NODE_JAVA_FAILED + ); + }); + }); +}); + +function error(msg){ + console.error("[node-java] "+msg); +} + +function exit(msg, code){ + if(msg && code){ + error(msg); + } else if(msg){ + log(msg); + } + process.exit(code || 0); +} + +function log(msg){ + console.log("[node-java] "+msg); +} + +function removePreinstall(){ + delete packageJSON.scripts.preinstall; + fs.writeFileSync( + path.resolve(__dirname, 'package.json') + , JSON.stringify(packageJSON, null, " ") + ); +} + +function restorePreinstall(){ + packageJSON.scripts.preinstall = 'node preinstall.js'; + fs.writeFileSync( + path.resolve(__dirname, 'package.json') + , JSON.stringify(packageJSON, null, " ") + ); +} + +process.on("uncaughtException", function(){ + restorePreinstall(); +}); From 943627848fde02e97a7761bee9b5a3583820ba8b Mon Sep 17 00:00:00 2001 From: jsdevel Date: Sat, 21 Dec 2013 00:54:07 -0700 Subject: [PATCH 2/3] greatly simplifying the process as suggested by joeferner --- binding.gyp | 6 +-- findJavaHome.js | 8 ++++ package.json | 7 ++-- preinstall.js | 109 ------------------------------------------------ 4 files changed, 14 insertions(+), 116 deletions(-) create mode 100644 findJavaHome.js delete mode 100644 preinstall.js diff --git a/binding.gyp b/binding.gyp index 35d1e919..ea83c4af 100644 --- a/binding.gyp +++ b/binding.gyp @@ -6,13 +6,13 @@ 'arch%': 'i386' }], ['OS=="win"', { - 'javahome%': ' Date: Sat, 21 Dec 2013 00:56:10 -0700 Subject: [PATCH 3/3] removing an unused variable in findJavaHome.js --- findJavaHome.js | 1 - 1 file changed, 1 deletion(-) diff --git a/findJavaHome.js b/findJavaHome.js index 1d76c670..2421daf6 100644 --- a/findJavaHome.js +++ b/findJavaHome.js @@ -1,5 +1,4 @@ require('find-java-home')(function(err, home){ - var build; if(err){ console.error("[node-java] "+err); process.exit(1);