我最近将 Java 11 应用程序移植到新发布的 Java 14 (ZuluJDK)。当尝试通过命令行使用新的 JPackage 打包我们的应用程序时,无论我使用哪个 jpackage 命令,唯一发生的事情是以下输出:
WARNING: Using incubator modules: jdk.incubator.jpackage
14
Run Code Online (Sandbox Code Playgroud)
一个示例命令(审查了一些内容,由 < > 占位符表示...):
jpackage --type app-image --verbose --input <path> --main-class <class> --main-jar ./<name>.jar --output runtime-image --name "<name>" --version 2.0.0 --vendor "<company>" --icon <icon-path>.ico
Run Code Online (Sandbox Code Playgroud)
有人可以帮我看看这是什么原因造成的吗?sdk版本的Output并没有提供太多帮助。
我使用 Java 17 和 JavaFX 16 库制作了一个应用程序。有没有办法使用 JPackage 制作可安装的 32 位版本?由于自 Java 9 以来 Java 一直都是 64 位(与 JavaFX 库相同),我怀疑这是不可能的,但是有什么办法可以做到吗?
我正在尝试使用 Spring Boot 构建 JavaFX 应用程序并使用 jpackage 进行部署。
使用该javafx-maven-plugin
javafx:run
命令时,我可以看到项目启动。但是将其构建为*.msi
安装程序、安装并启动后*.exe
,没有任何反应(无论是通过双击还是命令行运行)。
我该如何解决这个问题,或者至少知道发生了什么?我怀疑javafx:run
目标是手动 jlink 中缺少一些参数,但是我无法使用,javafx:jlink
因为应用程序本身不是模块,因为 Spring Boot 尚未模块化。
这是来源;
编辑:
根据@Slaw的建议,我修改了jpackage
命令以包含`--win-console。从而成功运行该应用程序。虽然这是一个很好的步骤,但这不是我想要的,我想在没有提示的情况下运行它。
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test</groupId>
<artifactId>mytest</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>17.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId> …
Run Code Online (Sandbox Code Playgroud) 通过 gradle (7.5.1) 构建 Kotlin JavaFX 应用程序,并尝试使用 jlink/jpackage 进行打包/安装。该应用程序有一个module-info.java
:
module com.foo.bar {
requires javafx.controls;
requires javafx.fxml;
requires de.jensd.fx.glyphs.fontawesome;
requires kotlin.stdlib;
requires com.github.ajalt.clikt;
requires com.google.gson;
requires java.sql;
opens com.foo.bar to javafx.fxml, com.google.gson;
exports com.foo.bar;
}
Run Code Online (Sandbox Code Playgroud)
gradle jlink
运行没有任何问题,但在执行脚本时,出现以下错误:
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package kotlin.* in both module com.foo.merged.module and module kotlin.stdlib
Run Code Online (Sandbox Code Playgroud)
某个图书馆在哪里*
(它每次都会改变)。这build.gradle
情况如下:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.6.20'
id 'org.openjfx.javafxplugin' version '0.0.13'
id 'org.beryx.jlink' version '2.25.0'
id 'application'
}
group 'com.foo' …
Run Code Online (Sandbox Code Playgroud) 我在 MacOS 上使用 Java 14 中的 JPackage,需要在构建 DMG 之前将文件复制到应用程序的 MacOS 和资源文件夹,但不知道如何操作。在打包工具用户指南中,它提到从名为 application-name-post-image.sh 的资源文件夹运行脚本,但这似乎没有发生。
我正在使用 Java 15 中的 jpackage 为我的 javafx 应用程序创建安装程序。因为其中一个库需要一些 Visual C++ DLL,所以我也想包含它们。它们应放置在主 .exe 和 .ico 所在的目录中。
我不明白如何编写 overrides.wxi 来实现这一目标。 https://docs.oracle.com/en/java/javase/14/jpackage/override-jpackage-resources.html#GUID-1B718F8B-B68D-4D46-B1DB-003D7729AAB6 这是我找到的有关此的所有信息。
jpackage ×6
java ×5
javafx ×3
deployment ×2
java-14 ×2
command-line ×1
gradle ×1
java-17 ×1
javafx-11 ×1
jlink ×1
kotlin ×1
packing ×1
spring-boot ×1
wix ×1