为什么JavaFX无法与.jar文件打包?

问题描述 投票:1回答:1

我在最终.jar文件中未包含json.org依赖项时遇到以下错误。

Exception in thread "Thread-2" java.lang.NoClassDefFoundError: org/json/JSONTokener
        at gui.Main.lambda$awake$0(Main.java:91)
        at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.ClassNotFoundException: org.json.JSONTokener
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 2 more

然后我得知您可以将json.org jar文件添加为“提取目录”,这解决了我的问题。完成此操作后,我想我将尝试对JavaFX执行相同的操作。在尝试将其添加为“提取目录”时,我注意到它已经在此处列出(如下图所示)。

enter image description here

但是,如果尝试使用java -jar [filename].jar运行jar文件,则会得到Error: JavaFX runtime components are missing, and are required to run this application。我可以使用java -jar --module-path /usr/local/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml [filename].jar运行它,但是从理论上讲这不是必需的。我想知道是否有人知道为什么这行不通?谢谢。

注:打包JavaFX确实很有用,因为它意味着我可以发送.jar文件,它可以直接使用,而无需用户设置额外的依赖关系。

java intellij-idea javafx packaging
1个回答
1
投票
maven-assembly-plugin将帮助您构建胖罐文件

maven-dependency-plugin将帮助您复制外部jar文件(不受maven存储库管理)

<plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>package.mainclass</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin>

© www.soinside.com 2019 - 2024. All rights reserved.