[英]Can't generate PDF with ITEXT in packaged Javafx or jar executable
[英]Why can't JavaFX be packaged with the .jar file?
我有以下错误,其中 json.org 依赖项未包含在最终 .jar 文件中。
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 做同样的事情。 在尝试将其添加为“提取目录”时,我注意到它已经在那里列出(如下图所示)。
但是,如果我尝试使用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
运行它java -jar --module-path /usr/local/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml [filename].jar
但这不应该理论上是必要的。 我想知道是否有人知道为什么这不起作用? 谢谢。
注意:打包 JavaFX 会非常有用,因为这意味着我可以只发送 .jar 文件,它可以开箱即用,用户无需设置额外的依赖项。
我记得我在打包 JavaFX 项目时遇到了同样的问题。 解决方法是构建fat jar(包括所有依赖) 如果使用maven,可以搜索2个关键字: maven-assembly-plugin
和maven-dependency-plugin
maven-assembly-plugin
将帮助您构建胖 jar 文件
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.