Search code examples
intellij-ideajavafxjar

How to fix java.lang.NoClassDefFoundError: javafx/application/Application when building a JavaFX application into a JAR file?


I have a JavaFX application that works fine when I run it inside IntelliJ IDEA, but when I try to build it into an executable JAR file, I get this error:

Exception in thread “main” java.lang.NoClassDefFoundError: javafx/application/Application
 at java.base/java.lang.ClassLoader.defineClass1(Native Method)
 at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
 at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
 at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
 at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
 at com.example.song_finder_fx.App.main(App.java:5)
Caused by: java.lang.ClassNotFoundException:  javafx.application.Application
 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) … 10 more

I have searched many resources and found that this error is related to some JAR files from JavaFX SDK (‘javafx.controls’, ‘javafx.fxml’). But I have added all the used libraries to the artifact when building the JAR file, including these two JAR files.

I am using Java SDK 19, JavaFX 21-ea+24 with IntelliJ IDEA.


Solution

  • You must create a fat jar.

    For modular application

    You can create a JavaFX application with IntelliJ with the build management Tool Maven or Gradle. There is a Maven/Gradle command for creating the jar by default. Look how it is done there.

    For non modular project

    If you use Gradle (instead of Maven), you can take a look at this sample application on my GitHub:

    https://github.com/davidweber411/SimpleJavaFxAppWithoutModules

    There is a Gradle Task "createCustomFatJar" which creates the complete executable jar.