我正在Eclipse中开发Maven项目+ JavaFX。 我的应用程序使用Gson进行序列化。
当然,当你还没有包含Gson.jar时,Eclipse会抱怨找不到GsonBuilder
(或者gson库的任何部分)。
我通过Maven依赖
包含了库在此之后,Eclipse很酷,我可以导入GsonBuilder
(或者gson库的任何部分)。
一切都很好。
并且mvn clean install
无误地工作。
我转到target
目录并执行java -jar myapplication.jar
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder
at app.MyApplication.<clinit>(MyApplication.java:68)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplicationWithArgs$153(LauncherImpl.java:352)
at com.sun.javafx.application.LauncherImpl$$Lambda$46/683287027.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/254413710.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda$49/1171144110.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/553264065.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.ClassNotFoundException: com.google.gson.GsonBuilder
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 13 more
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.NullPointerException
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:383)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
... 5 more
那么,你能帮帮我吗?发生了什么以及我该如何解决这个问题?
为什么没有检测到?我的意思是,编译器编译时没有错误。所以,gson
必须在那里。
我还试图排除并重新包含库。没有结果。
答案 0 :(得分:0)
@dunni是对的。
我使用maven-jar-plugin
代替maven-assembly-plugin
。
使用
添加pom.xml
后
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.main.class</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
然后,执行:
mvn clean compile assembly:single
mvn install
在jar-with-dependencies
目录中有一个带有postfix target
的可执行jar。
之后,执行java -jar target/myapp-jar-with-dependencies.jar
就像魅力一样。