badass-jlink-plugin icon indicating copy to clipboard operation
badass-jlink-plugin copied to clipboard

ClassCastException when running jpackage task with secondaryLauncher

Open xzel23 opened this issue 3 years ago • 3 comments

I am trying to create a jpackage with two launchers like this:

  launcher {
       name = 'DocDiff'
       moduleName = 'docdiff'
       mainClass = 'com.dua3.doc.app.docdiff.fx.Main'
       noConsole = true
       jvmArgs = [ '-Xmx3g' ]
   }

   secondaryLauncher {
       name = 'ddiff'
       moduleName = 'docdiff'
       mainClass = 'com.dua3.doc.app.docdiff.Main'
       noConsole = false
   }

this results in java.lang.ClassCastException: class java.util.ImmutableCollections$List12 cannot be cast to class java.lang.String. It works when I create just a single launcher.

Stacktrace when adding '--verbose' to jpackage.imageOptions:

[09:48:05.084] java.lang.ClassCastException: class java.util.ImmutableCollections$List12 cannot be cast to class java.lang.String (java.util.ImmutableCollections$List12 and java.lang.String are in module java.base of loader 'bootstrap')
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.lambda$getPathListParameter$5(LauncherData.java:309)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.getPathParam(LauncherData.java:271)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.getPathListParameter(LauncherData.java:308)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.getModulePath(LauncherData.java:293)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.createModular(LauncherData.java:135)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.create(LauncherData.java:115)
        at jdk.jpackage/jdk.jpackage.internal.StandardBundlerParam.lambda$static$0(StandardBundlerParam.java:84)
        at jdk.jpackage/jdk.jpackage.internal.BundlerParamInfo.fetchFrom(BundlerParamInfo.java:114)
        at jdk.jpackage/jdk.jpackage.internal.BundlerParamInfo.fetchFrom(BundlerParamInfo.java:88)
        at jdk.jpackage/jdk.jpackage.internal.CfgFile.initFromParams(CfgFile.java:50)
        at jdk.jpackage/jdk.jpackage.internal.AbstractAppImageBuilder.writeCfgFile(AbstractAppImageBuilder.java:63)
        at jdk.jpackage/jdk.jpackage.internal.MacAppImageBuilder.prepareApplicationFiles(MacAppImageBuilder.java:307)
        at jdk.jpackage/jdk.jpackage.internal.AppImageBundler.createAppBundle(AppImageBundler.java:172)
        at jdk.jpackage/jdk.jpackage.internal.AppImageBundler.execute(AppImageBundler.java:91)
        at jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Arguments.java:676)
        at jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments(Arguments.java:550)
        at jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:91)
        at jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)
[09:48:05.086] jdk.jpackage.internal.PackagerException: java.lang.ClassCastException: class java.util.ImmutableCollections$List12 cannot be cast to class java.lang.String (java.util.ImmutableCollections$List12 and java.lang.String are in module java.base of loader 'bootstrap')
        at jdk.jpackage/jdk.jpackage.internal.AppImageBundler.execute(AppImageBundler.java:96)
        at jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Arguments.java:676)
        at jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments(Arguments.java:550)
        at jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:91)
        at jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)
Caused by: java.lang.ClassCastException: class java.util.ImmutableCollections$List12 cannot be cast to class java.lang.String (java.util.ImmutableCollections$List12 and java.lang.String are in module java.base of loader 'bootstrap')
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.lambda$getPathListParameter$5(LauncherData.java:309)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.getPathParam(LauncherData.java:271)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.getPathListParameter(LauncherData.java:308)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.getModulePath(LauncherData.java:293)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.createModular(LauncherData.java:135)
        at jdk.jpackage/jdk.jpackage.internal.LauncherData.create(LauncherData.java:115)
        at jdk.jpackage/jdk.jpackage.internal.StandardBundlerParam.lambda$static$0(StandardBundlerParam.java:84)
        at jdk.jpackage/jdk.jpackage.internal.BundlerParamInfo.fetchFrom(BundlerParamInfo.java:114)
        at jdk.jpackage/jdk.jpackage.internal.BundlerParamInfo.fetchFrom(BundlerParamInfo.java:88)
        at jdk.jpackage/jdk.jpackage.internal.CfgFile.initFromParams(CfgFile.java:50)
        at jdk.jpackage/jdk.jpackage.internal.AbstractAppImageBuilder.writeCfgFile(AbstractAppImageBuilder.java:63)
        at jdk.jpackage/jdk.jpackage.internal.MacAppImageBuilder.prepareApplicationFiles(MacAppImageBuilder.java:307)
        at jdk.jpackage/jdk.jpackage.internal.AppImageBundler.createAppBundle(AppImageBundler.java:172)
        at jdk.jpackage/jdk.jpackage.internal.AppImageBundler.execute(AppImageBundler.java:91)
        ... 4 more

I am still undecided if this is a problem with the jlink plugin (2.24.4) or the JDK (openjdk 17.0.2 on MaOS). I tried several JDK distributions (Oracle OpenJDK, Zulu, etc.).

xzel23 avatar Feb 28 '22 08:02 xzel23

I'm getting the same problem on Windows with plugin 2.25.0 and OpenJDK 17.0.2, this does not happen when setting -Dbadass.jlink.jpackage.home to jdk 14 either syntax did change for jpackage, either jpackage for java 17 is broken with secondary launchers

optyfr avatar Apr 16 '22 13:04 optyfr

Happens with all OpenJDK 17 and 18 builds I tried (Oracle, Zulu, Bellsoft) on both Windows and MacOS. When I dig into the exception stack trace, it looks like an errr in OpenJDK. I didn't have the time to reproduce without this plugin yet, and the process of submitting OpenJDK bugs still is a mystery to me.

xzel23 avatar Apr 17 '22 07:04 xzel23

Bump.

Any progress on this? I am getting the same error and I could pin point it to the usage of the secondaryLauncher section

Isfirs avatar Sep 09 '22 19:09 Isfirs

Created a bug report at github.com/airsquared/jpackage_error

airsquared avatar Jun 14 '23 09:06 airsquared

Ended up fixing this myself at openjdk/jdk#14840, which was just merged. I also created back port PRs for JDK 21 and 20 at openjdk/jdk21u#120 and openjdk/jdk20u#86, respectively.

airsquared avatar Jul 20 '23 03:07 airsquared

Wow, thank you! That's great news.

xzel23 avatar Jul 20 '23 09:07 xzel23

Now that my PRs for JDK 21 and 17 were finally merged, the fix will be in JDK 21.0.1 and JDK 17.0.10.

airsquared avatar Sep 12 '23 16:09 airsquared