Search code examples
javafxgluongluon-mobilejavafxports

How to export a .jar file from a gluon project?


any idea how to export a .jar that includes everything from the gluon project ? I used the Shadow jar but the result won't open and gives

    Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: com/sun/javafx/css/converters/SizeConverter
        at com.gluonhq.charm.glisten.control.AppBar.<clinit>(SourceFile:406)
        at com.gluonhq.charm.glisten.application.MobileApplication.start(SourceFile:191)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        ... 1 more
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.css.converters.SizeConverter
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 11 more

Solution

  • To export a jar of a Gluon project so it runs on desktop, you can use a Shadow plugin like in this answer, or you can use the built-in tasks jar or `distZip, but taking into account that you need to modify the build to include the desktop dependencies, as in here.

    After that, the resulting jar will run on Java 8 or Java 9, based on what dependencies you were using.

    So far, the regular jfxmobile plugin uses dependencies for Java 8:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'org.javafxports:jfxmobile-plugin:1.3.9'
        }
    }
    
    apply plugin: 'org.javafxports.jfxmobile'
    
    repositories {
        jcenter()
        maven {
            url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
        }
    }
    
    dependencies {
        compile 'com.gluonhq:charm:4.4.1'
    }
    

    So the resulting jar will run only under Java 8.

    But you can modify the build so you can run Java 9 on Desktop:

    dependencies {
        compile 'com.gluonhq:charm:4.4.0-jdk9'
    }
    

    Note that if you have other dependencies, those should be compatible with Java 9 as well.