Looking into the code of Arguments.generateBundle(Map params), I believe it's a 
bug to immediately throw an error when a bundler has configuration problems.

Instead, that bundler should be removed from the platformBundlers List. 
Quick-and-dirty solution:


diff -r e11f3bf34083 
src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java       
Fri Mar 01 08:27:51 2019 -0500
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java       
Mon Mar 11 12:37:43 2019 +0100
@@ -37,6 +37,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.Properties;
@@ -655,7 +656,10 @@
         // clean these extra (and unneeded) temp directories.
         StandardBundlerParam.BUILD_ROOT.fetchFrom(params);
 
-        for (jdk.jpackage.internal.Bundler bundler : getPlatformBundlers()) {
+        List<jdk.jpackage.internal.Bundler> platformBundlers = 
getPlatformBundlers();
+        ListIterator<jdk.jpackage.internal.Bundler> platformBundleIterator = 
platformBundlers.listIterator();
+        while (platformBundleIterator.hasNext()) {
+            jdk.jpackage.internal.Bundler bundler = 
platformBundleIterator.next();
             Map<String, ? super Object> localParams = new HashMap<>(params);
             try {
                 if (bundler.validate(localParams)) {
@@ -677,18 +681,20 @@
             } catch (ConfigException e) {
                 Log.debug(e);
                 if (e.getAdvice() != null) {
-                    throw new PackagerException(e,
+                    Log.info(new PackagerException(e,
                             "MSG_BundlerConfigException",
-                            bundler.getName(), e.getMessage(), e.getAdvice());
+                            bundler.getName(), e.getMessage(), 
e.getAdvice()).getMessage());
                 } else {
-                    throw new PackagerException(e,
+                    Log.info(new PackagerException(e,
                            "MSG_BundlerConfigExceptionNoAdvice",
-                            bundler.getName(), e.getMessage());
+                            bundler.getName(), e.getMessage()).getMessage());
                 }
+                platformBundleIterator.remove();
             } catch (RuntimeException re) {
                 Log.debug(re);
-                throw new PackagerException(re, "MSG_BundlerRuntimeException",
-                        bundler.getName(), re.toString());
+                Log.info(new PackagerException(re, 
"MSG_BundlerRuntimeException",
+                        bundler.getName(), re.toString()).getMessage());
+                platformBundleIterator.remove();
             } finally {
                 if (userProvidedBuildRoot) {
                     Log.verbose(MessageFormat.format(


Best regards,

/Lennart Börjeson

> 11 mars 2019 kl. 09:40 skrev Lennart Börjeson <lenbo...@gmail.com>:
> 
> I'm experimenting with jpackage from the current EA available at 
> https://jdk.java.net/jpackage/ <https://jdk.java.net/jpackage/>, for the 
> moment on Mac only.
> 
> I have an existing application which I have previously deployed on multiple 
> platforms using the then bundled javafxpackager.
> 
> With the current EA (build 17), I find I must specify the --installer-type 
> parameter, otherwise I get the following error:
> 
> $ /Users/lennartb/Downloads/jdk-13.jdk/Contents/Home/bin/jpackage 
> create-installer --overwrite --output 
> /Users/lennartb/RaT/git/BMF/GUI/build/jpackage --name bmfgui --app-image 
> /Users/lennartb/RaT/git/BMF/GUI/build/jpackage/BMFGraphicalUserInterface.app 
> --icon BMF.icns --identifier com.cinnober.bmf.gui.Main --app-version 1.6.10 
> --verbose
> jdk.jpackage.internal.PackagerException: Bundler Mac App Store Ready Bundler 
> skipped because of a configuration problem: Mac App Store apps must be 
> signed, and signing has been disabled by bundler configuration.  
> Advice to fix: Either unset 'signBundle' or set 'signBundle' to true.
>       at 
> jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Arguments.java:726)
>       at 
> jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments(Arguments.java:642)
>       at jdk.jpackage/jdk.jpackage.main.Main.run(Main.java:90)
>       at jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:53)
> Caused by: jdk.jpackage.internal.ConfigException: Mac App Store apps must be 
> signed, and signing has been disabled by bundler configuration.
>       at 
> jdk.jpackage/jdk.jpackage.internal.MacAppStoreBundler.validate(MacAppStoreBundler.java:332)
>       at 
> jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Arguments.java:705)
>       ... 3 more
> 
> With the previous javafxpackager this wasn't needed. Javafxpackager always 
> tried to create all installer types and ignored all errors from any specific 
> bundler, e.g. on linux it always tried to create both a Debian package and an 
> rpm and just ignored if any of the requisite builder tools was unavailable.
> 
> The obvious workaround in my case is to run jpackage twice, once with 
> "--installer-type pkg" and once with "--installer-type dmg", but since I'm 
> furthered hampered by limitations of my toolchain (gradle + 
> badass-jlink-plugin) it would really simplify matters it jpackage could be 
> restored to the javafxpackager behaviour when "--installer-type" is 
> unspecified, e.g. ignore errors and create whatever installers it can.
> 
> 
> Best regards,
> 
> /Lennart Börjeson
> 
> 

Reply via email to