239 }
240
241 if (classPath.isEmpty()) {
242 throw new IllegalStateException("Class path is required.");
243 }
244
245 // Create directory structure
246 try {
247 System.out.println("Creating app bundle: " + name);
248
249 File rootDirectory = new File(outputDirectory, name + ".app");
250 delete(rootDirectory);
251 rootDirectory.mkdir();
252
253 File contentsDirectory = new File(rootDirectory, "Contents");
254 contentsDirectory.mkdir();
255
256 File macOSDirectory = new File(contentsDirectory, "MacOS");
257 macOSDirectory.mkdir();
258
259 File javaDirectory = new File(contentsDirectory, "JavaVM");
260 javaDirectory.mkdir();
261
262 File classesDirectory = new File(javaDirectory, "Classes");
263 classesDirectory.mkdir();
264
265 File plugInsDirectory = new File(contentsDirectory, "PlugIns");
266 plugInsDirectory.mkdir();
267
268 File resourcesDirectory = new File(contentsDirectory, "Resources");
269 resourcesDirectory.mkdir();
270
271 // Generate Info.plist
272 File infoPlistFile = new File(contentsDirectory, "Info.plist");
273 infoPlistFile.createNewFile();
274 writeInfoPlist(infoPlistFile);
275
276 // Generate PkgInfo
277 File pkgInfoFile = new File(contentsDirectory, "PkgInfo");
278 pkgInfoFile.createNewFile();
279 writePkgInfo(pkgInfoFile);
338 xout.writeCharacters("\n");
339
340 // Begin root dictionary
341 xout.writeStartElement(DICT_TAG);
342 xout.writeCharacters("\n");
343
344 // Write bundle properties
345 writeProperty(xout, "CFBundleDevelopmentRegion", "English");
346 writeProperty(xout, "CFBundleExecutable", EXECUTABLE_NAME);
347 writeProperty(xout, "CFBundleIconFile", (icon == null) ? DEFAULT_ICON_NAME : icon.getName());
348 writeProperty(xout, "CFBundleIdentifier", identifier);
349 writeProperty(xout, "CFBundleDisplayName", displayName);
350 writeProperty(xout, "CFBundleInfoDictionaryVersion", "6.0");
351 writeProperty(xout, "CFBundleName", name);
352 writeProperty(xout, "CFBundlePackageType", OS_TYPE_CODE);
353 writeProperty(xout, "CFBundleShortVersionString", shortVersion);
354 writeProperty(xout, "CFBundleSignature", signature);
355 writeProperty(xout, "CFBundleVersion", "1");
356 writeProperty(xout, "NSHumanReadableCopyright", copyright);
357
358 // Start Java properties
359 writeKey(xout, "JavaVM");
360 xout.writeStartElement(DICT_TAG);
361
362 // Write runtime
363 writeProperty(xout, "Runtime", runtime.getName());
364
365 // Write main class name
366 writeProperty(xout, "MainClassName", mainClassName);
367
368 // Write options
369 writeKey(xout, "Options");
370
371 xout.writeStartElement(ARRAY_TAG);
372 xout.writeCharacters("\n");
373
374 for (String option : options) {
375 writeString(xout, option);
376 }
377
378 xout.writeEndElement();
379 xout.writeCharacters("\n");
380
381 // Write arguments
382 writeKey(xout, "Arguments");
383
384 xout.writeStartElement(ARRAY_TAG);
385 xout.writeCharacters("\n");
386
387 for (String argument : arguments) {
388 writeString(xout, argument);
389 }
390
391 xout.writeEndElement();
392 xout.writeCharacters("\n");
393
394 // End Java properties
395 xout.writeEndElement();
396 xout.writeCharacters("\n");
397
398 // End root dictionary
399 xout.writeEndElement();
400 xout.writeCharacters("\n");
401
402 // End root element
403 xout.writeEndElement();
404 xout.writeCharacters("\n");
405
406 // Close document
407 xout.writeEndDocument();
408 xout.writeCharacters("\n");
409
410 out.flush();
411 } catch (XMLStreamException exception) {
412 throw new IOException(exception);
413 } finally {
414 out.close();
415 }
416 }
417
|
239 }
240
241 if (classPath.isEmpty()) {
242 throw new IllegalStateException("Class path is required.");
243 }
244
245 // Create directory structure
246 try {
247 System.out.println("Creating app bundle: " + name);
248
249 File rootDirectory = new File(outputDirectory, name + ".app");
250 delete(rootDirectory);
251 rootDirectory.mkdir();
252
253 File contentsDirectory = new File(rootDirectory, "Contents");
254 contentsDirectory.mkdir();
255
256 File macOSDirectory = new File(contentsDirectory, "MacOS");
257 macOSDirectory.mkdir();
258
259 File javaDirectory = new File(contentsDirectory, "Java");
260 javaDirectory.mkdir();
261
262 File classesDirectory = new File(javaDirectory, "Classes");
263 classesDirectory.mkdir();
264
265 File plugInsDirectory = new File(contentsDirectory, "PlugIns");
266 plugInsDirectory.mkdir();
267
268 File resourcesDirectory = new File(contentsDirectory, "Resources");
269 resourcesDirectory.mkdir();
270
271 // Generate Info.plist
272 File infoPlistFile = new File(contentsDirectory, "Info.plist");
273 infoPlistFile.createNewFile();
274 writeInfoPlist(infoPlistFile);
275
276 // Generate PkgInfo
277 File pkgInfoFile = new File(contentsDirectory, "PkgInfo");
278 pkgInfoFile.createNewFile();
279 writePkgInfo(pkgInfoFile);
338 xout.writeCharacters("\n");
339
340 // Begin root dictionary
341 xout.writeStartElement(DICT_TAG);
342 xout.writeCharacters("\n");
343
344 // Write bundle properties
345 writeProperty(xout, "CFBundleDevelopmentRegion", "English");
346 writeProperty(xout, "CFBundleExecutable", EXECUTABLE_NAME);
347 writeProperty(xout, "CFBundleIconFile", (icon == null) ? DEFAULT_ICON_NAME : icon.getName());
348 writeProperty(xout, "CFBundleIdentifier", identifier);
349 writeProperty(xout, "CFBundleDisplayName", displayName);
350 writeProperty(xout, "CFBundleInfoDictionaryVersion", "6.0");
351 writeProperty(xout, "CFBundleName", name);
352 writeProperty(xout, "CFBundlePackageType", OS_TYPE_CODE);
353 writeProperty(xout, "CFBundleShortVersionString", shortVersion);
354 writeProperty(xout, "CFBundleSignature", signature);
355 writeProperty(xout, "CFBundleVersion", "1");
356 writeProperty(xout, "NSHumanReadableCopyright", copyright);
357
358 // Write runtime
359 writeProperty(xout, "JVMRuntime", runtime.getName());
360
361 // Write main class name
362 writeProperty(xout, "JVMMainClassName", mainClassName);
363
364 // Write options
365 writeKey(xout, "JVMOptions");
366
367 xout.writeStartElement(ARRAY_TAG);
368 xout.writeCharacters("\n");
369
370 for (String option : options) {
371 writeString(xout, option);
372 }
373
374 xout.writeEndElement();
375 xout.writeCharacters("\n");
376
377 // Write arguments
378 writeKey(xout, "JVMArguments");
379
380 xout.writeStartElement(ARRAY_TAG);
381 xout.writeCharacters("\n");
382
383 for (String argument : arguments) {
384 writeString(xout, argument);
385 }
386
387 xout.writeEndElement();
388 xout.writeCharacters("\n");
389
390 // End root dictionary
391 xout.writeEndElement();
392 xout.writeCharacters("\n");
393
394 // End root element
395 xout.writeEndElement();
396 xout.writeCharacters("\n");
397
398 // Close document
399 xout.writeEndDocument();
400 xout.writeCharacters("\n");
401
402 out.flush();
403 } catch (XMLStreamException exception) {
404 throw new IOException(exception);
405 } finally {
406 out.close();
407 }
408 }
409
|