通过创建 zip 文件手动创建可运行的 JAR

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

我正在尝试创建一个可运行的 JavaFX JAR。

我已经编译了所有文件(使用 Java 8,主要版本 52),创建了一个 Manifest 文件并创建了一个包含这些目录和文件的 zip:

应用程序.zip

META-INF
  MANIFEST.MF
lib
  javafx-controls.jar
  ...
animals
  Dog.class
  Cat.class
shapes
  Circle.class
  Square.class
controllers
  AllAnimalsController.class
views
  allanimals.fxml
Main.class

然后我将 zip 重命名为

app.jar

lib
文件夹包含所有JavaFX依赖项。我可以通过这样做来运行罐子:

java --module-path lib  --add-modules javafx.controls,javafx.fxml   -jar app.jar 

但前提是我从包含

lib
文件夹的目录运行 jar:

running-jar-test-directory
  app.jar
  lib
    javafx-controls.jar
    ...

我无法使用自己的

lib
文件夹(打包在 jar 内)运行 jar,而不依赖位于
lib
中的外部
running-jar-test-directory
文件夹。

我该如何实现它?

我尝试更新我的

MANIFEST.MF
以包含
jar
文件夹中的所有
lib
文件,如下所示:

Manifest-Version: 1.0
Class-Path: lib/javafx-controls.jar ...
Main-Class: Main

但它不起作用 - 我在尝试运行 jar 时遇到错误:

java   --add-modules javafx.controls,javafx.fxml   -jar app.jar 
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found
java  -jar app.jar 
Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

我知道有用于创建 JavaFX jar 的工具/插件,但我想了解如何手动执行此操作。

java javafx jar
1个回答
0
投票

我真的很想了解在没有插件的情况下它是如何完成的

然后转到入门文档并按照说明进行操作

运行时图像部分|非模块化项目 |命令行。

尽管 StackOverflow 上不鼓励仅提供链接答案,但我不会在此处重现这些说明,因为它们可能会过时,而且更糟糕的是,有人可能会认为这是个好主意而关注它们。

引用文档:

您还可以在命令行上为 JavaFX 项目创建可运行的 fat jar。

警告:这是一个令人沮丧的繁琐且容易出错的手动过程,应使用 Maven 的阴影插件或 Gradle 的 jar 任务来避免,以防 jlink 不适用。

此 JRE 是特定于平台的。然而,如果包含来自每个平台的不同本机库,它可以很容易地成为多平台 jar。这需要下载适用于所有平台的 JavaFX SDK,提取所有必需的 jar(例如,javafx.graphics 对于每个平台都是不同的),并复制所有本机库,如上所示。正如上面提到的,这个过程不应该手动完成。

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