jdeploy-installer 3.0.0-alpha.30 → 3.0.0-alpha.34

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.
@@ -7,6 +7,17 @@ var port = "0";
7
7
  var warPath = "";
8
8
  var javaVersionString = "11";
9
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';
10
21
 
11
22
 
12
23
  function njreWrap() {
@@ -35,11 +46,17 @@ function njreWrap() {
35
46
  }
36
47
 
37
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
+
38
55
  return new Promise((resolve, reject) => {
39
56
  createDir(dir)
40
57
  .then(() => fetch(url))
41
58
  .then(response => {
42
- const destFile = path.join(dir, path.basename(url))
59
+ const destFile = path.join(dir, destName)
43
60
  const destStream = fs.createWriteStream(destFile)
44
61
  response.body.pipe(destStream).on('finish', () => resolve(destFile))
45
62
  })
@@ -87,17 +104,20 @@ function njreWrap() {
87
104
  fs.mkdirSync(jdeployDir);
88
105
  }
89
106
 
90
- var jreDir = path.join(jdeployDir, 'jre');
107
+ var jreDir = path.join(jdeployDir, bundleType);
91
108
  if (!fs.existsSync(jreDir)) {
92
109
  fs.mkdirSync(jreDir);
93
110
  }
94
-
95
- jreDir = path.join(jreDir, javaVersionString);
111
+ var vs = javaVersionString;
112
+ if (javafx) {
113
+ vs += 'fx';
114
+ }
115
+ jreDir = path.join(jreDir, vs);
96
116
  if (!fs.existsSync(jreDir)) {
97
117
  fs.mkdirSync(jreDir);
98
118
  }
99
119
  const newFile = path.join(jreDir, file.split(path.sep).slice(-1)[0])
100
-
120
+ //console.log("Copying file "+file+" to "+newFile);
101
121
  fs.copyFile(file, newFile, err => {
102
122
  if (err) reject(err)
103
123
 
@@ -110,6 +130,7 @@ function njreWrap() {
110
130
  }
111
131
 
112
132
  function extractZip (file, dir) {
133
+ //console.log("Extracting "+file+" to "+dir);
113
134
  return new Promise((resolve, reject) => {
114
135
  yauzl.open(file, { lazyEntries: true }, (err, zipFile) => {
115
136
  if (err) reject(err)
@@ -157,8 +178,10 @@ function njreWrap() {
157
178
  }
158
179
 
159
180
  function extract (file) {
160
- const dir = path.join(path.dirname(file), 'jre')
181
+ var dirString = jdk? 'jdk' : 'jre';
161
182
 
183
+ const dir = path.join(path.dirname(file), dirString)
184
+ //console.log("About to extract "+file+" to "+dir);
162
185
  return createDir(dir).then(() => {
163
186
  return path.extname(file) === '.zip'
164
187
  ? extractZip(file, dir)
@@ -198,9 +221,14 @@ function njreWrap() {
198
221
  * // Handle the error
199
222
  * })
200
223
  */
201
- function install (version = 8, options = {}) {
202
- 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
203
226
  options = { ...options, openjdk_impl, release, type }
227
+
228
+ if (provider === 'zulu') {
229
+ return installZulu(version, options);
230
+ }
231
+
204
232
  let url = 'https://api.adoptopenjdk.net/v2/info/releases/openjdk' + version + '?'
205
233
 
206
234
  if (!options.os) {
@@ -245,6 +273,50 @@ function njreWrap() {
245
273
  .then(extract)
246
274
  }
247
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
+ bundleType: 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
+
248
320
  return {install:install};
249
321
 
250
322
 
@@ -299,6 +371,66 @@ var getDirectories = dirPath => fs.readdirSync(dirPath).filter(
299
371
  file => fs.statSync(path.join(dirPath, file)).isDirectory()
300
372
  );
301
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
+
302
434
  function getEmbeddedJavaHome() {
303
435
  var _platform = os.platform();
304
436
  var _driver = '';
@@ -309,8 +441,13 @@ function getEmbeddedJavaHome() {
309
441
  default:
310
442
  fail('unsupported platform: ' + _platform);
311
443
  }
444
+ var vs = javaVersionString;
445
+ if (javafx) {
446
+ vs += 'fx';
447
+ }
448
+ var typeDir = jdk ? 'jdk' : 'jre';
312
449
 
313
- var jreDir = path.join(os.homedir(), '.jdeploy', 'jre', javaVersionString, 'jre');
450
+ var jreDir = path.join(os.homedir(), '.jdeploy', 'jre', vs, 'jre');
314
451
  try {
315
452
  var out = jreDir + path.sep + getDirectories(jreDir)[0] + (_driver ? (path.sep + _driver) : '');
316
453
  return out;
@@ -362,7 +499,7 @@ if (tryJavaHomeFirst) {
362
499
 
363
500
  if (!done) {
364
501
 
365
- var _javaHome = getEmbeddedJavaHome();
502
+ var _javaHome = findSupportedRuntime(javaVersionString, bundleType === 'jdk', javafx);
366
503
  if (_javaHome && fs.existsSync(_javaHome)) {
367
504
  var javaVersion = getJavaVersion(path.join(_javaHome, 'bin'));
368
505
  if (javaVersionMatch(javaVersion, targetJavaVersion)) {
@@ -377,13 +514,22 @@ if (!done) {
377
514
 
378
515
  if (!done) {
379
516
  console.log("Downloading java runtime environment for version "+targetJavaVersion);
380
- njre.install(targetJavaVersion).then(function(dir) {
381
- let dirCont = fs.readdirSync( dir );
382
- if (os.platform() == 'darwin') {
383
- env['JAVA_HOME'] = path.join(dir, dirCont[0], 'Contents', 'Home');
384
- } else {
385
- 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
+
386
530
  }
531
+ fs.chmodSync(javaBinary, 0755);
532
+
387
533
  env['PATH'] = path.join(env['JAVA_HOME'], 'bin') + path.delimiter + env['PATH'];
388
534
 
389
535
  run(env['JAVA_HOME']);
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.30",
14
+ "version": "3.0.0-alpha.34",
15
15
  "jdeploy": {
16
16
  "jar": "target/jdeploy-installer-1.0-SNAPSHOT.jar",
17
17
  "bundles": [