我们已经了解到JDK-10,JavaFX曾经是JDK的一部分,但是随着JDK-11的发布,JavaFX将被单独包含。
为此,我们需要为JavaFX提供 VM参数,如下所示:-
--module-path "C:\javafx-sdk-11.0.1\lib" --add-modules=javafx.controls,javafx.fxml
到目前为止,一切正常,但是当我们最终创建要分发的JAR文件时,将出现如下消息:
VM参数将不属于可运行的JAR。启动JAR时可以在命令行中传递参数
因此,现在JAR文件无法打开应用程序。
现在,请通过一些建议的方式为我提供帮助,以便用户可以通过单击JAR图标(比以前更早)来打开应用程序。
编辑
应用由提供的解决方案后 openjfx.io(非模块化项目部分),我能够使用JavaFX生成独立的Jar文件。
现在,我想添加一些本地依赖项,例如pdfbox
和Sqlite
:
sqlite =C:\sqlite-jdbc-3.6.20.1.jar
pdfbox=C:\pdfbox-app-2.0.10.jar
我正在执行以下步骤:
第1步
cd eclipse-workspace2018\test101
第2步
set PATH_TO_FX="C:\javafx-sdk-11.0.1\lib"
第3步
dir /s /b src\*.java > sources.txt & \
javac --module-path %PATH_TO_FX% --add-modules=javafx.controls \
-d out @sources.txt & del sources.txt
第4步
cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & \
jar xf "%PATH_TO_FX%\javafx.graphics.jar" & \
jar xf "%PATH_TO_FX%\javafx.controls.jar" & \
cd ..
copy "%PATH_TO_FX%\..\bin\prism*.dll" out & \
copy "%PATH_TO_FX%\..\bin\javafx*.dll" out & \
copy "%PATH_TO_FX%\..\bin\glass.dll" out & \
copy "%PATH_TO_FX%\..\bin\decora_sse.dll" out
del out\META-INF\MANIFEST.MF & del out\module-info.class
mkdir libs
jar --create --file=libs/index101.jar \
--main-class=test101.Launcher -C out .
java -jar libs\index101.jar
请修改我的步骤,以添加上述两个依赖项pdfBox和sqlite。
答案 0 :(得分:0)
首先,请提一个建议:完全不建议在命令行上创建胖子。这是应该避免的手动过程。如果您仍然需要一个胖子罐,则应尝试使用Maven或Gradle以及现有插件来完成此任务。相反,您应该尝试创建一个模块化项目,并使用jlink
创建一个可分发给给定平台的自定义映像。
第二,如果您仍然想手动做一个胖子罐,则应该了解上述步骤,以便能够根据需要对其进行修改。基本上,胖子罐的主要思想是一个单独的项目,其中包含来自所有可能依赖项的所有* .class文件(和其他资源),而不仅仅是源代码中的依赖项。 openjfx.io上的教程仅提到JavaFX依赖项的情况。
因此,如果您有更多的依赖项,则想法是以与提取JavaFX jar相同的方式提取其jar的内容。请参阅xf
之类的jar命令选项。
这是在步骤3中完成的:
cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & \
jar xf "%PATH_TO_FX%\javafx.graphics.jar" & \
jar xf "%PATH_TO_FX%\javafx.controls.jar" & \
cd ..
您可以使用现有的jar修改该步骤:
cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & \
jar xf "%PATH_TO_FX%\javafx.graphics.jar" & \
jar xf "%PATH_TO_FX%\javafx.controls.jar" & \
jar xf "C:\sqlite-jdbc-3.6.20.1.jar" & \
jar xf "C:\pdfbox-app-2.0.10.jar" & \
cd ..
然后,您可以以相同的方式继续执行其余步骤。
请注意,尽管这可能有效,但那些第三方jar也可能具有其他依赖关系(请参阅其pom.xml)。在这种情况下,您将需要手动下载它们,并以相同的方式将其添加到胖子罐中。如果您使用Maven或Gradle,它们会自动为您完成。
如前所述,完全不建议这样做。