在JDK 11和JavaFx中创建JAR文件

时间:2018-12-05 18:14:00

标签: java javafx

我们已经了解到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时可以在命令行中传递参数

screenshot

因此,现在JAR文件无法打开应用程序。

现在,请通过一些建议的方式为我提供帮助,以便用户可以通过单击JAR图标(比以前更早)来打开应用程序。

编辑

应用由提供的解决方案后 openjfx.io(非模块化项目部分),我能够使用JavaFX生成独立的Jar文件。

现在,我想添加一些本地依赖项,例如pdfboxSqlite

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。

1 个答案:

答案 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,它们会自动为您完成。

如前所述,完全不建议这样做。