jdeploy-installer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/jdeploy-bundle/icon.png +0 -0
- package/jdeploy-bundle/jar-runner.jar +0 -0
- package/jdeploy-bundle/jdeploy-installer-1.0-SNAPSHOT.jar +0 -0
- package/jdeploy-bundle/jdeploy.js +465 -0
- package/jdeploy-bundle/libs/clove-io-0.1.jar +0 -0
- package/jdeploy-bundle/libs/cn1-compatlib-1.0-SNAPSHOT.jar +0 -0
- package/jdeploy-bundle/libs/commons-cli-1.4.jar +0 -0
- package/jdeploy-bundle/libs/commons-compress-1.21.jar +0 -0
- package/jdeploy-bundle/libs/commons-exec-1.3.jar +0 -0
- package/jdeploy-bundle/libs/commons-io-2.11.0.jar +0 -0
- package/jdeploy-bundle/libs/commons-lang3-3.12.0.jar +0 -0
- package/jdeploy-bundle/libs/commons-text-1.9.jar +0 -0
- package/jdeploy-bundle/libs/icns-core-1.1.jar +0 -0
- package/jdeploy-bundle/libs/image4j-0.7.2.jar +0 -0
- package/jdeploy-bundle/libs/jdeploy-shared-1.0-SNAPSHOT.jar +0 -0
- package/jdeploy-bundle/libs/jmdns-3.4.1.jar +0 -0
- package/jdeploy-bundle/libs/jtar-1.1.jar +0 -0
- package/jdeploy-bundle/libs/slf4j-api-1.7.32.jar +0 -0
- package/jdeploy-bundle/libs/thumbnailator-0.4.15.jar +0 -0
- package/jdeploy-bundle/libs/xmllib-1.0-SNAPSHOT.jar +0 -0
- package/jdeploy-bundle/libs/zip4j-2.3.1-SNAPSHOT.jar +0 -0
- package/package.json +22 -0
package/README.md
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
|
|
3
|
+
var jarName = "jdeploy-installer-1.0-SNAPSHOT.jar";
|
|
4
|
+
var mainClass = "{{MAIN_CLASS}}";
|
|
5
|
+
var classPath = "{{CLASSPATH}}";
|
|
6
|
+
var port = "0";
|
|
7
|
+
var warPath = "";
|
|
8
|
+
var javaVersionString = "11";
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
function njreWrap() {
|
|
12
|
+
'use strict'
|
|
13
|
+
|
|
14
|
+
const path = require('path')
|
|
15
|
+
const fs = require('fs')
|
|
16
|
+
const os = require('os')
|
|
17
|
+
const crypto = require('crypto')
|
|
18
|
+
const fetch = require('node-fetch')
|
|
19
|
+
const yauzl = require('yauzl')
|
|
20
|
+
const tar = require('tar')
|
|
21
|
+
|
|
22
|
+
function createDir (dir) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
fs.access(dir, err => {
|
|
25
|
+
if (err && err.code === 'ENOENT') {
|
|
26
|
+
fs.mkdir(dir, err => {
|
|
27
|
+
if (err) reject(err)
|
|
28
|
+
resolve()
|
|
29
|
+
})
|
|
30
|
+
} else if (!err) resolve()
|
|
31
|
+
else reject(err)
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function download (dir, url) {
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
createDir(dir)
|
|
39
|
+
.then(() => fetch(url))
|
|
40
|
+
.then(response => {
|
|
41
|
+
const destFile = path.join(dir, path.basename(url))
|
|
42
|
+
const destStream = fs.createWriteStream(destFile)
|
|
43
|
+
response.body.pipe(destStream).on('finish', () => resolve(destFile))
|
|
44
|
+
})
|
|
45
|
+
.catch(err => reject(err))
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function downloadAll (dir, url) {
|
|
50
|
+
return download(dir, url + '.sha256.txt').then(() => download(dir, url))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function genChecksum (file) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
fs.readFile(file, (err, data) => {
|
|
56
|
+
if (err) reject(err)
|
|
57
|
+
|
|
58
|
+
resolve(
|
|
59
|
+
crypto
|
|
60
|
+
.createHash('sha256')
|
|
61
|
+
.update(data)
|
|
62
|
+
.digest('hex')
|
|
63
|
+
)
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function verify (file) {
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
fs.readFile(file + '.sha256.txt', 'utf-8', (err, data) => {
|
|
71
|
+
if (err) reject(err)
|
|
72
|
+
|
|
73
|
+
genChecksum(file).then(checksum => {
|
|
74
|
+
checksum === data.split(' ')[0]
|
|
75
|
+
? resolve(file)
|
|
76
|
+
: reject(new Error('File and checksum don\'t match'))
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function move (file) {
|
|
83
|
+
return new Promise((resolve, reject) => {
|
|
84
|
+
const jdeployDir = path.join(os.homedir(), '.jdeploy');
|
|
85
|
+
if (!fs.existsSync(jdeployDir)) {
|
|
86
|
+
fs.mkdirSync(jdeployDir);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
var jreDir = path.join(jdeployDir, 'jre');
|
|
90
|
+
if (!fs.existsSync(jreDir)) {
|
|
91
|
+
fs.mkdirSync(jreDir);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
jreDir = path.join(jreDir, javaVersionString);
|
|
95
|
+
if (!fs.existsSync(jreDir)) {
|
|
96
|
+
fs.mkdirSync(jreDir);
|
|
97
|
+
}
|
|
98
|
+
const newFile = path.join(jreDir, file.split(path.sep).slice(-1)[0])
|
|
99
|
+
|
|
100
|
+
fs.copyFile(file, newFile, err => {
|
|
101
|
+
if (err) reject(err)
|
|
102
|
+
|
|
103
|
+
fs.unlink(file, err => {
|
|
104
|
+
if (err) reject(err)
|
|
105
|
+
resolve(newFile)
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function extractZip (file, dir) {
|
|
112
|
+
return new Promise((resolve, reject) => {
|
|
113
|
+
yauzl.open(file, { lazyEntries: true }, (err, zipFile) => {
|
|
114
|
+
if (err) reject(err)
|
|
115
|
+
|
|
116
|
+
zipFile.readEntry()
|
|
117
|
+
zipFile.on('entry', entry => {
|
|
118
|
+
const entryPath = path.join(dir, entry.fileName)
|
|
119
|
+
|
|
120
|
+
if (/\/$/.test(entry.fileName)) {
|
|
121
|
+
fs.mkdir(entryPath, { recursive: true }, err => {
|
|
122
|
+
if (err && err.code !== 'EEXIST') reject(err)
|
|
123
|
+
|
|
124
|
+
zipFile.readEntry()
|
|
125
|
+
})
|
|
126
|
+
} else {
|
|
127
|
+
zipFile.openReadStream(entry, (err, readStream) => {
|
|
128
|
+
if (err) reject(err)
|
|
129
|
+
|
|
130
|
+
readStream.on('end', () => {
|
|
131
|
+
zipFile.readEntry()
|
|
132
|
+
})
|
|
133
|
+
readStream.pipe(fs.createWriteStream(entryPath))
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
zipFile.once('close', () => {
|
|
138
|
+
fs.unlink(file, err => {
|
|
139
|
+
if (err) reject(err)
|
|
140
|
+
resolve(dir)
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function extractTarGz (file, dir) {
|
|
148
|
+
return tar.x({ file: file, cwd: dir }).then(() => {
|
|
149
|
+
return new Promise((resolve, reject) => {
|
|
150
|
+
fs.unlink(file, err => {
|
|
151
|
+
if (err) reject(err)
|
|
152
|
+
resolve(dir)
|
|
153
|
+
})
|
|
154
|
+
})
|
|
155
|
+
})
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function extract (file) {
|
|
159
|
+
const dir = path.join(path.dirname(file), 'jre')
|
|
160
|
+
|
|
161
|
+
return createDir(dir).then(() => {
|
|
162
|
+
return path.extname(file) === '.zip'
|
|
163
|
+
? extractZip(file, dir)
|
|
164
|
+
: extractTarGz(file, dir)
|
|
165
|
+
})
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Installs a JRE copy for the app
|
|
170
|
+
* @param {number} [version = 8] - Java Version (`8`/`9`/`10`/`11`/`12`)
|
|
171
|
+
* @param {object} [options] - Installation Options
|
|
172
|
+
* @param {string} [options.os] - Operating System (defaults to current) (`windows`/`mac`/`linux`/`solaris`/`aix`)
|
|
173
|
+
* @param {string} [options.arch] - Architecture (defaults to current) (`x64`/`x32`/`ppc64`/`s390x`/`ppc64le`/`aarch64`/`sparcv9`)
|
|
174
|
+
* @param {string} [options.openjdk_impl = hotspot] - OpenJDK Implementation (`hotspot`/`openj9`)
|
|
175
|
+
* @param {string} [options.release = latest] - Release
|
|
176
|
+
* @param {string} [options.type = jre] - Binary Type (`jre`/`jdk`)
|
|
177
|
+
* @param {string} [options.heap_size] - Heap Size (`normal`/`large`)
|
|
178
|
+
* @return Promise<string> - Resolves to the installation directory or rejects an error
|
|
179
|
+
* @example
|
|
180
|
+
* const njre = require('njre')
|
|
181
|
+
*
|
|
182
|
+
* // Use default options
|
|
183
|
+
* njre.install()
|
|
184
|
+
* .then(dir => {
|
|
185
|
+
* // Do stuff
|
|
186
|
+
* })
|
|
187
|
+
* .catch(err => {
|
|
188
|
+
* // Handle the error
|
|
189
|
+
* })
|
|
190
|
+
*
|
|
191
|
+
* // or custom ones
|
|
192
|
+
* njre.install(11, { os: 'aix', arch: 'ppc64', openjdk_impl: 'openj9' })
|
|
193
|
+
* .then(dir => {
|
|
194
|
+
* // Do stuff
|
|
195
|
+
* })
|
|
196
|
+
* .catch(err => {
|
|
197
|
+
* // Handle the error
|
|
198
|
+
* })
|
|
199
|
+
*/
|
|
200
|
+
function install (version = 8, options = {}) {
|
|
201
|
+
const { openjdk_impl = 'hotspot', release = 'latest', type = 'jre' } = options
|
|
202
|
+
options = { ...options, openjdk_impl, release, type }
|
|
203
|
+
let url = 'https://api.adoptopenjdk.net/v2/info/releases/openjdk' + version + '?'
|
|
204
|
+
|
|
205
|
+
if (!options.os) {
|
|
206
|
+
switch (process.platform) {
|
|
207
|
+
case 'aix':
|
|
208
|
+
options.os = 'aix'
|
|
209
|
+
break
|
|
210
|
+
case 'darwin':
|
|
211
|
+
options.os = 'mac'
|
|
212
|
+
break
|
|
213
|
+
case 'linux':
|
|
214
|
+
options.os = 'linux'
|
|
215
|
+
break
|
|
216
|
+
case 'sunos':
|
|
217
|
+
options.os = 'solaris'
|
|
218
|
+
break
|
|
219
|
+
case 'win32':
|
|
220
|
+
options.os = 'windows'
|
|
221
|
+
break
|
|
222
|
+
default:
|
|
223
|
+
return Promise.reject(new Error('Unsupported operating system'))
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (!options.arch) {
|
|
227
|
+
if (/^ppc64|s390x|x32|x64$/g.test(process.arch)) options.arch = process.arch
|
|
228
|
+
else if (process.arch === 'ia32') options.arch = 'x32'
|
|
229
|
+
else return Promise.reject(new Error('Unsupported architecture'))
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
Object.keys(options).forEach(key => { url += key + '=' + options[key] + '&' })
|
|
233
|
+
|
|
234
|
+
const tmpdir = path.join(os.tmpdir(), 'njre')
|
|
235
|
+
|
|
236
|
+
return fetch(url)
|
|
237
|
+
.then(response => response.json())
|
|
238
|
+
.then(json => downloadAll(tmpdir, json.binaries[0]['binary_link']))
|
|
239
|
+
.then(verify)
|
|
240
|
+
.then(move)
|
|
241
|
+
.then(extract)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return {install:install};
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
var fs = require('fs');
|
|
252
|
+
var os = require('os');
|
|
253
|
+
var path = require('path');
|
|
254
|
+
const njre = njreWrap();
|
|
255
|
+
const targetJavaVersion = parseInt(javaVersionString);
|
|
256
|
+
var shell = require("shelljs/global");
|
|
257
|
+
function getJdeploySupportDir() {
|
|
258
|
+
return os.homedir() + path.sep + ".jdeploy";
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function getJavaVersion(binPath) {
|
|
262
|
+
|
|
263
|
+
var oldPath = env['PATH'];
|
|
264
|
+
if (binPath) {
|
|
265
|
+
env['PATH'] = binPath + path.delimiter + env['PATH'];
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
try {
|
|
269
|
+
var javaVersionProc = exec('java -version', {silent:true});
|
|
270
|
+
if (javaVersionProc.code !== 0) {
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
var stdout = javaVersionProc.stderr;
|
|
274
|
+
//console.log(javaVersionProc);
|
|
275
|
+
//console.log("stdout is "+stdout);
|
|
276
|
+
var regexp = /version "(.*?)"/;
|
|
277
|
+
var match = regexp.exec(stdout);
|
|
278
|
+
var parts = match[1].split('.');
|
|
279
|
+
var join = '.';
|
|
280
|
+
var versionStr = '';
|
|
281
|
+
parts.forEach(function(v) {
|
|
282
|
+
versionStr += v;
|
|
283
|
+
if (join !== null) {
|
|
284
|
+
versionStr += join;
|
|
285
|
+
join = null;
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
versionStr = versionStr.replace('_', '');
|
|
289
|
+
//console.log("Java version string "+versionStr)
|
|
290
|
+
return parseFloat(versionStr);
|
|
291
|
+
} catch (e) {
|
|
292
|
+
return false;
|
|
293
|
+
} finally {
|
|
294
|
+
env['PATH'] = oldPath;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
var getDirectories = dirPath => fs.readdirSync(dirPath).filter(
|
|
298
|
+
file => fs.statSync(path.join(dirPath, file)).isDirectory()
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
function getEmbeddedJavaHome() {
|
|
302
|
+
var _platform = os.platform();
|
|
303
|
+
var _driver = '';
|
|
304
|
+
switch (_platform) {
|
|
305
|
+
case 'darwin': _platform = 'macosx'; _driver = 'Contents' + path.sep + 'Home'; break;
|
|
306
|
+
case 'win32': _platform = 'windows'; _driver = ''; break;
|
|
307
|
+
case 'linux': _driver = ''; break;
|
|
308
|
+
default:
|
|
309
|
+
fail('unsupported platform: ' + _platform);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
var jreDir = path.join(os.homedir(), '.jdeploy', 'jre', javaVersionString, 'jre');
|
|
313
|
+
|
|
314
|
+
try {
|
|
315
|
+
return jreDir + path.sep + getDirectories(jreDir)[0] + (_driver ? (path.sep + _driver) : '');
|
|
316
|
+
} catch (e) {
|
|
317
|
+
//console.log(e);
|
|
318
|
+
return jreDir;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function javaVersionMatch(v1, v2) {
|
|
323
|
+
if (v1 === 8) v1 = 1.8;
|
|
324
|
+
if (v2 === 8) v2 = 1.8;
|
|
325
|
+
if (Math.floor(v1) !== Math.floor(v2)) {
|
|
326
|
+
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
if (v1 < 2) {
|
|
330
|
+
// Up to 1.8, the version would be like 1.7, 1.8, etc..
|
|
331
|
+
// So we need to check the minor version for equivalency
|
|
332
|
+
return (Math.floor(v1*10) === Math.floor(v2*10));
|
|
333
|
+
} else {
|
|
334
|
+
// Starting with Java 9, the version is like 9, 10, 11, etc..
|
|
335
|
+
// so we just compare major version.
|
|
336
|
+
return (Math.floor(v1) === Math.floor(v2));
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
var done = false;
|
|
342
|
+
if (env['JAVA_HOME']) {
|
|
343
|
+
var javaHomeVersion = getJavaVersion(path.join(env['JAVA_HOME'], 'bin'));
|
|
344
|
+
if (javaVersionMatch(javaHomeVersion, targetJavaVersion)) {
|
|
345
|
+
done = true;
|
|
346
|
+
env['PATH'] = path.join(env['JAVA_HOME'], 'bin') + path.delimiter + env['PATH'];
|
|
347
|
+
run(env['JAVA_HOME']);
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (!done) {
|
|
353
|
+
var javaVersion = getJavaVersion();
|
|
354
|
+
if (javaVersionMatch(javaVersion, targetJavaVersion)) {
|
|
355
|
+
done = true;
|
|
356
|
+
run();
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (!done) {
|
|
361
|
+
|
|
362
|
+
var _javaHome = getEmbeddedJavaHome();
|
|
363
|
+
var javaVersion = getJavaVersion(path.join(_javaHome, 'bin'));
|
|
364
|
+
if (javaVersionMatch(javaVersion, targetJavaVersion)) {
|
|
365
|
+
|
|
366
|
+
env['PATH'] = path.join(_javaHome, 'bin') + path.delimiter + env['PATH'];
|
|
367
|
+
env['JAVA_HOME'] = _javaHome;
|
|
368
|
+
done = true;
|
|
369
|
+
run(_javaHome);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
if (!done) {
|
|
374
|
+
console.log("Downloading java runtime environment for version "+targetJavaVersion);
|
|
375
|
+
njre.install(targetJavaVersion).then(function(dir) {
|
|
376
|
+
let dirCont = fs.readdirSync( dir );
|
|
377
|
+
if (os.platform() == 'darwin') {
|
|
378
|
+
env['JAVA_HOME'] = path.join(dir, dirCont[0], 'Contents', 'Home');
|
|
379
|
+
} else {
|
|
380
|
+
env['JAVA_HOME'] = path.join(dir, dirCont[0]);
|
|
381
|
+
}
|
|
382
|
+
env['PATH'] = path.join(env['JAVA_HOME'], 'bin') + path.delimiter + env['PATH'];
|
|
383
|
+
|
|
384
|
+
run(env['JAVA_HOME']);
|
|
385
|
+
}).catch(function(err) {
|
|
386
|
+
console.log("Failed to install JRE", err);
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
function run(_javaHome) {
|
|
394
|
+
var fail = reason => {
|
|
395
|
+
console.error(reason);
|
|
396
|
+
process.exit(1);
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
classPath = classPath.split(':');
|
|
401
|
+
var classPathStr = '';
|
|
402
|
+
var first = true;
|
|
403
|
+
classPath.forEach(function(part) {
|
|
404
|
+
if (!first) classPathStr += path.delimiter;
|
|
405
|
+
first = false;
|
|
406
|
+
classPathStr += __dirname + '/' + part;
|
|
407
|
+
});
|
|
408
|
+
classPath = classPathStr;
|
|
409
|
+
|
|
410
|
+
var userArgs = process.argv.slice(2);
|
|
411
|
+
var javaArgs = [];
|
|
412
|
+
javaArgs.push('-Djdeploy.base='+__dirname);
|
|
413
|
+
javaArgs.push('-Djdeploy.port='+port);
|
|
414
|
+
javaArgs.push('-Djdeploy.war.path='+warPath);
|
|
415
|
+
var programArgs = [];
|
|
416
|
+
userArgs.forEach(function(arg) {
|
|
417
|
+
if (arg.startsWith('-D') || arg.startsWith('-X')) {
|
|
418
|
+
javaArgs.push(arg);
|
|
419
|
+
} else {
|
|
420
|
+
programArgs.push(arg);
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
var cmd = 'java';
|
|
424
|
+
|
|
425
|
+
if (!_javaHome) {
|
|
426
|
+
env['PATH'] = path.join(getEmbeddedJavaHome(), 'bin') + path.delimiter + env['PATH'];
|
|
427
|
+
if (env['JAVA_HOME']) {
|
|
428
|
+
env['PATH'] = env['JAVA_HOME'] + path.sep + 'bin' + path.delimiter + env['PATH'];
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
var javaVersion = getJavaVersion();
|
|
435
|
+
|
|
436
|
+
//console.log("Java version is "+getJavaVersion());
|
|
437
|
+
|
|
438
|
+
javaArgs.forEach(function(arg) {
|
|
439
|
+
cmd += ' "'+arg+'"';
|
|
440
|
+
});
|
|
441
|
+
if (jarName !== '{'+'{JAR_NAME}}') {
|
|
442
|
+
cmd += ' -jar "'+__dirname+'/'+jarName+'" ';
|
|
443
|
+
} else {
|
|
444
|
+
cmd += ' -cp "'+classPath+'" '+mainClass+' ';
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
programArgs.forEach(function(arg) {
|
|
448
|
+
cmd += ' "'+arg+'"';
|
|
449
|
+
});
|
|
450
|
+
var child = exec(cmd, {async: true});
|
|
451
|
+
process.stdin.setEncoding('utf8');
|
|
452
|
+
|
|
453
|
+
process.stdin.on('readable', function() {
|
|
454
|
+
var chunk = null;
|
|
455
|
+
while (null !== (chunk = process.stdin.read())) {
|
|
456
|
+
try {
|
|
457
|
+
child.stdin.write(chunk);
|
|
458
|
+
} catch(e){}
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
child.on('close', function(code) {
|
|
462
|
+
process.exit(code);
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bin": {"jdeploy-installer": "jdeploy-bundle/jdeploy.js"},
|
|
3
|
+
"author": "Steve Hannah",
|
|
4
|
+
"description": "Desktop installer for Java applications deployed using jDeploy",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"preferGlobal": true,
|
|
7
|
+
"repository": {
|
|
8
|
+
"type" : "git",
|
|
9
|
+
"url" : "https://github.com/shannah/jdeploy.git",
|
|
10
|
+
"directory": "installer"
|
|
11
|
+
},
|
|
12
|
+
"version": "1.0.0",
|
|
13
|
+
"jdeploy": {
|
|
14
|
+
"jar": "target/jdeploy-installer-1.0-SNAPSHOT.jar",
|
|
15
|
+
"bundles" : ["mac", "win", "linux"]
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {"shelljs": "^0.8.4"},
|
|
18
|
+
"license": "ISC",
|
|
19
|
+
"name": "jdeploy-installer",
|
|
20
|
+
"files": ["jdeploy-bundle"],
|
|
21
|
+
"scripts": {"test": "echo \"Error: no test specified\" && exit 1"}
|
|
22
|
+
}
|