8213345: Secondary Launchers broken on mac. JDK-8200758-branch
authorherrick
Mon, 05 Nov 2018 19:00:34 -0500
branchJDK-8200758-branch
changeset 57018 9d782e357916
parent 57017 1b08af362a30
child 57019 585939d9f952
8213345: Secondary Launchers broken on mac. Reviewed-by: almatvee
src/jdk.jpackager/macosx/classes/jdk/jpackager/internal/builders/mac/MacAppImageBuilder.java
--- a/src/jdk.jpackager/macosx/classes/jdk/jpackager/internal/builders/mac/MacAppImageBuilder.java	Mon Nov 05 17:32:00 2018 -0500
+++ b/src/jdk.jpackager/macosx/classes/jdk/jpackager/internal/builders/mac/MacAppImageBuilder.java	Mon Nov 05 19:00:34 2018 -0500
@@ -330,8 +330,7 @@
 
     @Override
     public void prepareApplicationFiles() throws IOException {
-        File f;
-
+        Map<String, ? super Object> originalParams = new HashMap<>(params);
         // Generate PkgInfo
         File pkgInfoFile = new File(contentsDir.toFile(), "PkgInfo");
         pkgInfoFile.createNewFile();
@@ -339,6 +338,7 @@
 
         Path executable = macOSDir.resolve(getLauncherName(params));
 
+        // create the main app launcher
         try (InputStream is_launcher = getResourceAsStream("papplauncher");
              InputStream is_lib = getResourceAsStream(LIBRARY_NAME)) {
             // Copy executable and library to MacOS folder
@@ -346,11 +346,28 @@
             writeEntry(is_lib, macOSDir.resolve(LIBRARY_NAME));
         }
         executable.toFile().setExecutable(true, false);
+        // generate main app launcher config file
+        File cfg = new File(root.toFile(), getLauncherCfgName(params));
+        writeCfgFile(params, cfg, "$APPDIR/PlugIns/Java.runtime");
 
-        // generate launcher config
-        writeCfgFile(params,
-                new File(root.toFile(), getLauncherCfgName(params)),
-                "$APPDIR/PlugIns/Java.runtime");
+        // create secondary app launcher(s) and config file(s)
+        List<Map<String, ? super Object>> entryPoints =
+                StandardBundlerParam.SECONDARY_LAUNCHERS.fetchFrom(params);
+        for (Map<String, ? super Object> entryPoint : entryPoints) {
+            Map<String, ? super Object> tmp = new HashMap<>(originalParams);
+            tmp.putAll(entryPoint);
+
+            // add executable for secondary launcher
+            Path secondaryExecutable = macOSDir.resolve(getLauncherName(tmp));
+            try (InputStream is = getResourceAsStream("papplauncher");) {
+                writeEntry(is, secondaryExecutable);
+            }
+            secondaryExecutable.toFile().setExecutable(true, false);
+
+            // add config file for secondary launcher
+            cfg = new File(root.toFile(), getLauncherCfgName(tmp));
+            writeCfgFile(tmp, cfg, "$APPDIR/PlugIns/Java.runtime");
+        }
 
         // Copy class path entries to Java folder
         copyClassPathEntries(javaDir);
@@ -370,7 +387,7 @@
         // copy file association icons
         for (Map<String, ?
                 super Object> fa : FILE_ASSOCIATIONS.fetchFrom(params)) {
-            f = FA_ICON.fetchFrom(fa);
+            File f = FA_ICON.fetchFrom(fa);
             if (f != null && f.exists()) {
                 try (InputStream in2 = new FileInputStream(f)) {
                     Files.copy(in2, resourcesDir.resolve(f.getName()));