jdeploy-installer 3.0.0-alpha.6 → 3.0.1

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.
@@ -6,6 +6,18 @@ var classPath = "{{CLASSPATH}}";
6
6
  var port = "0";
7
7
  var warPath = "";
8
8
  var javaVersionString = "11";
9
+ var tryJavaHomeFirst = false;
10
+ var javafx = false;
11
+ var bundleType = 'jre';
12
+ if ('{{JAVAFX}}' === 'true') {
13
+ javafx = true;
14
+ }
15
+ if ('{{JDK}}' === 'true') {
16
+ bundleType = 'jdk';
17
+ }
18
+
19
+ var jdk = (bundleType === 'jdk');
20
+ var jdkProvider = 'zulu';
9
21
 
10
22
 
11
23
  function njreWrap() {
@@ -34,11 +46,17 @@ function njreWrap() {
34
46
  }
35
47
 
36
48
  function download (dir, url) {
49
+ if (url.indexOf("?") > 0 || jdkProvider === 'zulu') {
50
+ var destName = bundleType + ".zip";
51
+ } else {
52
+ destName = path.basename(url);
53
+ }
54
+
37
55
  return new Promise((resolve, reject) => {
38
56
  createDir(dir)
39
57
  .then(() => fetch(url))
40
58
  .then(response => {
41
- const destFile = path.join(dir, path.basename(url))
59
+ const destFile = path.join(dir, destName)
42
60
  const destStream = fs.createWriteStream(destFile)
43
61
  response.body.pipe(destStream).on('finish', () => resolve(destFile))
44
62
  })
@@ -86,17 +104,20 @@ function njreWrap() {
86
104
  fs.mkdirSync(jdeployDir);
87
105
  }
88
106
 
89
- var jreDir = path.join(jdeployDir, 'jre');
107
+ var jreDir = path.join(jdeployDir, bundleType);
90
108
  if (!fs.existsSync(jreDir)) {
91
109
  fs.mkdirSync(jreDir);
92
110
  }
93
-
94
- jreDir = path.join(jreDir, javaVersionString);
111
+ var vs = javaVersionString;
112
+ if (javafx) {
113
+ vs += 'fx';
114
+ }
115
+ jreDir = path.join(jreDir, vs);
95
116
  if (!fs.existsSync(jreDir)) {
96
117
  fs.mkdirSync(jreDir);
97
118
  }
98
119
  const newFile = path.join(jreDir, file.split(path.sep).slice(-1)[0])
99
-
120
+ //console.log("Copying file "+file+" to "+newFile);
100
121
  fs.copyFile(file, newFile, err => {
101
122
  if (err) reject(err)
102
123
 
@@ -109,6 +130,7 @@ function njreWrap() {
109
130
  }
110
131
 
111
132
  function extractZip (file, dir) {
133
+ //console.log("Extracting "+file+" to "+dir);
112
134
  return new Promise((resolve, reject) => {
113
135
  yauzl.open(file, { lazyEntries: true }, (err, zipFile) => {
114
136
  if (err) reject(err)
@@ -156,8 +178,10 @@ function njreWrap() {
156
178
  }
157
179
 
158
180
  function extract (file) {
159
- const dir = path.join(path.dirname(file), 'jre')
181
+ var dirString = jdk? 'jdk' : 'jre';
160
182
 
183
+ const dir = path.join(path.dirname(file), dirString)
184
+ //console.log("About to extract "+file+" to "+dir);
161
185
  return createDir(dir).then(() => {
162
186
  return path.extname(file) === '.zip'
163
187
  ? extractZip(file, dir)
@@ -197,9 +221,14 @@ function njreWrap() {
197
221
  * // Handle the error
198
222
  * })
199
223
  */
200
- function install (version = 8, options = {}) {
201
- const { openjdk_impl = 'hotspot', release = 'latest', type = 'jre' } = options
224
+ function install (version = 11, options = {}) {
225
+ const { openjdk_impl = 'hotspot', release = 'latest', type = 'jre', javafx = false, provider = 'zulu' } = options
202
226
  options = { ...options, openjdk_impl, release, type }
227
+
228
+ if (provider === 'zulu') {
229
+ return installZulu(version, options);
230
+ }
231
+
203
232
  let url = 'https://api.adoptopenjdk.net/v2/info/releases/openjdk' + version + '?'
204
233
 
205
234
  if (!options.os) {
@@ -224,9 +253,12 @@ function njreWrap() {
224
253
  }
225
254
  }
226
255
  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'))
256
+ if (options.os == 'mac') {
257
+ // For now, for compatibility reasons use x64 always
258
+ options.arch = 'x64';
259
+ } else if (/^ppc64|s390x|x32|x64$/g.test(process.arch)) options.arch = process.arch
260
+ else if (process.arch === 'ia32') options.arch = 'x32'
261
+ else return Promise.reject(new Error('Unsupported architecture'))
230
262
  }
231
263
 
232
264
  Object.keys(options).forEach(key => { url += key + '=' + options[key] + '&' })
@@ -241,6 +273,50 @@ function njreWrap() {
241
273
  .then(extract)
242
274
  }
243
275
 
276
+ function installZulu(version = 11, options = {}) {
277
+ const { type = 'jre', javafx = false } = options
278
+ var q = {
279
+
280
+ java_version: version,
281
+ ext: 'zip',
282
+ bundle_type: type,
283
+ javafx: ''+javafx,
284
+ arch: 'x86',
285
+ hw_bitness: '64',
286
+
287
+ };
288
+
289
+ var zuluBaseURL = "https://api.azul.com/zulu/download/community/v1.0/bundles/latest/binary?"
290
+ if (!options.os) {
291
+ switch (process.platform) {
292
+
293
+ case 'darwin':
294
+ q.os = 'macos'
295
+ break
296
+ case 'linux':
297
+ q.os = 'linux'
298
+ break
299
+
300
+ case 'win32':
301
+ case 'win64':
302
+ q.os = 'windows'
303
+ break
304
+ default:
305
+ return Promise.reject(new Error('Unsupported operating system'))
306
+ }
307
+ }
308
+
309
+
310
+ var url = zuluBaseURL;
311
+ Object.keys(q).forEach(key => { url += key + '=' + q[key] + '&' })
312
+ const tmpdir = path.join(os.tmpdir(), 'njre')
313
+ //console.log("Downloading "+url);
314
+ return download(tmpdir, url)
315
+ .then(move)
316
+ .then(extract)
317
+
318
+ }
319
+
244
320
  return {install:install};
245
321
 
246
322
 
@@ -271,8 +347,6 @@ function getJavaVersion(binPath) {
271
347
  return false;
272
348
  }
273
349
  var stdout = javaVersionProc.stderr;
274
- //console.log(javaVersionProc);
275
- //console.log("stdout is "+stdout);
276
350
  var regexp = /version "(.*?)"/;
277
351
  var match = regexp.exec(stdout);
278
352
  var parts = match[1].split('.');
@@ -286,7 +360,6 @@ function getJavaVersion(binPath) {
286
360
  }
287
361
  });
288
362
  versionStr = versionStr.replace('_', '');
289
- //console.log("Java version string "+versionStr)
290
363
  return parseFloat(versionStr);
291
364
  } catch (e) {
292
365
  return false;
@@ -298,6 +371,66 @@ var getDirectories = dirPath => fs.readdirSync(dirPath).filter(
298
371
  file => fs.statSync(path.join(dirPath, file)).isDirectory()
299
372
  );
300
373
 
374
+ function getJavaHomeInPath(basepath) {
375
+
376
+ var dirs = null;
377
+ try {
378
+ dirs = getDirectories(basepath);
379
+ } catch (e) {
380
+ return null;
381
+ }
382
+ if (dirs && dirs.length > 0) {
383
+ basepath = path.join(basepath, dirs[0]);
384
+ if (os.platform() != 'darwin') {
385
+ return basepath;
386
+ }
387
+ if (fs.existsSync(path.join(basepath, 'Contents', 'Home'))) {
388
+ return path.join(basepath, 'Contents', 'Home');
389
+ }
390
+
391
+ var adapterDirectories = getDirectories(basepath).filter(subdir => {
392
+ return subdir.match(/^zulu/) && fs.existsSync(path.join(basepath, subdir, 'Contents', 'Home'));
393
+ });
394
+
395
+ if (adapterDirectories && adapterDirectories.length > 0) {
396
+ return path.join(basepath, adapterDirectories[0], 'Contents', 'Home');
397
+ }
398
+ }
399
+ return null;
400
+ }
401
+
402
+ function findSupportedRuntime(javaVersion, jdk, javafx) {
403
+ var jdeployDir = path.join(os.homedir(), ".jdeploy");
404
+
405
+ // First check for the full-meal deal
406
+ var _javaHomePath = getJavaHomeInPath(path.join(jdeployDir, 'jdk', javaVersion+'fx', 'jdk'));
407
+ if (_javaHomePath && fs.existsSync(_javaHomePath)) {
408
+ return _javaHomePath;
409
+ }
410
+ if (!javafx) {
411
+ var _javaHomePath = getJavaHomeInPath(path.join(jdeployDir, 'jdk', javaVersion, 'jdk'));
412
+ if (_javaHomePath && fs.existsSync(_javaHomePath)) {
413
+ return _javaHomePath;
414
+ }
415
+ }
416
+
417
+ if (!jdk) {
418
+ var _javaHomePath = getJavaHomeInPath(path.join(jdeployDir, 'jre', javaVersion+'fx', 'jre'));
419
+ if (_javaHomePath && fs.existsSync(_javaHomePath)) {
420
+ return _javaHomePath;
421
+ }
422
+ }
423
+
424
+ if (!jdk && !javafx) {
425
+ var _javaHomePath = getJavaHomeInPath(path.join(jdeployDir, 'jre', javaVersion, 'jre'));
426
+ if (_javaHomePath && fs.existsSync(_javaHomePath)) {
427
+ return _javaHomePath;
428
+ }
429
+ }
430
+ return null;
431
+
432
+ }
433
+
301
434
  function getEmbeddedJavaHome() {
302
435
  var _platform = os.platform();
303
436
  var _driver = '';
@@ -308,14 +441,18 @@ function getEmbeddedJavaHome() {
308
441
  default:
309
442
  fail('unsupported platform: ' + _platform);
310
443
  }
444
+ var vs = javaVersionString;
445
+ if (javafx) {
446
+ vs += 'fx';
447
+ }
448
+ var typeDir = jdk ? 'jdk' : 'jre';
311
449
 
312
- var jreDir = path.join(os.homedir(), '.jdeploy', 'jre', javaVersionString, 'jre');
313
-
450
+ var jreDir = path.join(os.homedir(), '.jdeploy', 'jre', vs, 'jre');
314
451
  try {
315
- return jreDir + path.sep + getDirectories(jreDir)[0] + (_driver ? (path.sep + _driver) : '');
452
+ var out = jreDir + path.sep + getDirectories(jreDir)[0] + (_driver ? (path.sep + _driver) : '');
453
+ return out;
316
454
  } catch (e) {
317
- //console.log(e);
318
- return jreDir;
455
+ return null;
319
456
  }
320
457
  }
321
458
 
@@ -339,46 +476,60 @@ function javaVersionMatch(v1, v2) {
339
476
  }
340
477
 
341
478
  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']);
479
+ if (tryJavaHomeFirst) {
480
+ if (env['JAVA_HOME']) {
481
+ var javaHomeVersion = getJavaVersion(path.join(env['JAVA_HOME'], 'bin'));
482
+ if (javaVersionMatch(javaHomeVersion, targetJavaVersion)) {
483
+ done = true;
484
+ env['PATH'] = path.join(env['JAVA_HOME'], 'bin') + path.delimiter + env['PATH'];
485
+ run(env['JAVA_HOME']);
348
486
 
487
+ }
349
488
  }
350
- }
351
489
 
352
- if (!done) {
353
- var javaVersion = getJavaVersion();
354
- if (javaVersionMatch(javaVersion, targetJavaVersion)) {
355
- done = true;
356
- run();
490
+ if (!done) {
491
+ var javaVersion = getJavaVersion();
492
+ if (javaVersionMatch(javaVersion, targetJavaVersion)) {
493
+ done = true;
494
+ run();
495
+ }
357
496
  }
358
497
  }
359
498
 
360
- if (!done) {
361
499
 
362
- var _javaHome = getEmbeddedJavaHome();
363
- var javaVersion = getJavaVersion(path.join(_javaHome, 'bin'));
364
- if (javaVersionMatch(javaVersion, targetJavaVersion)) {
500
+ if (!done) {
365
501
 
366
- env['PATH'] = path.join(_javaHome, 'bin') + path.delimiter + env['PATH'];
367
- env['JAVA_HOME'] = _javaHome;
368
- done = true;
369
- run(_javaHome);
502
+ var _javaHome = findSupportedRuntime(javaVersionString, bundleType === 'jdk', javafx);
503
+ if (_javaHome && fs.existsSync(_javaHome)) {
504
+ var javaVersion = getJavaVersion(path.join(_javaHome, 'bin'));
505
+ if (javaVersionMatch(javaVersion, targetJavaVersion)) {
506
+ env['PATH'] = path.join(_javaHome, 'bin') + path.delimiter + env['PATH'];
507
+ env['JAVA_HOME'] = _javaHome;
508
+ done = true;
509
+ run(_javaHome);
510
+ }
370
511
  }
512
+
371
513
  }
372
514
 
373
515
  if (!done) {
374
516
  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]);
517
+ njre.install(targetJavaVersion, {type: bundleType, javafx: javafx}).then(function(dir) {
518
+ var _javaHome = getJavaHomeInPath(dir);
519
+ if (_javaHome == null)
520
+
521
+ if (!_javaHome || !fs.existsSync(_javaHome)) {
522
+ throw new Error("After install, could not find java home at "+_javaHome);
523
+ }
524
+ env['JAVA_HOME'] = _javaHome;
525
+
526
+ var javaBinary = path.join(_javaHome, 'bin', 'java');
527
+ if (!fs.existsSync(javaBinary)) {
528
+ javaBinary += '.exe';
529
+
381
530
  }
531
+ fs.chmodSync(javaBinary, 0755);
532
+
382
533
  env['PATH'] = path.join(env['JAVA_HOME'], 'bin') + path.delimiter + env['PATH'];
383
534
 
384
535
  run(env['JAVA_HOME']);
@@ -428,13 +579,11 @@ function run(_javaHome) {
428
579
  env['PATH'] = env['JAVA_HOME'] + path.sep + 'bin' + path.delimiter + env['PATH'];
429
580
  }
430
581
 
582
+ } else {
583
+ env['JAVA_HOME'] = _javaHome;
584
+ cmd = _javaHome + path.sep + 'bin' + path.sep + 'java';
431
585
  }
432
586
 
433
-
434
- var javaVersion = getJavaVersion();
435
-
436
- //console.log("Java version is "+getJavaVersion());
437
-
438
587
  javaArgs.forEach(function(arg) {
439
588
  cmd += ' "'+arg+'"';
440
589
  });
Binary file
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://github.com/shannah/jdeploy.git",
12
12
  "directory": "installer"
13
13
  },
14
- "version": "3.0.0-alpha.6",
14
+ "version": "3.0.1",
15
15
  "jdeploy": {
16
16
  "jar": "target/jdeploy-installer-1.0-SNAPSHOT.jar",
17
17
  "bundles": [
@@ -21,7 +21,8 @@
21
21
  ],
22
22
  "macAppBundleId": "HRNMHC7527.ca.weblite.jdeploy.installer",
23
23
  "codesign": true,
24
- "notarize": false
24
+ "notarize": false,
25
+ "fork": false
25
26
  },
26
27
  "dependencies": {
27
28
  "shelljs": "^0.8.4"