我正在尝试打包一个适用jpackage
于 Windows 的应用程序。我正在使用Java 19
和WiX 4
。
Package Id Version Commands
---------------------------------------------
wix 4.0.0-preview.1 wix
Run Code Online (Sandbox Code Playgroud)
java 19.0.1 2022-10-18
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
根据Packaging Tool User's Guide
,生成windows安装包的要求是:
需要 WiX 3.0 或更高版本。
但是,当尝试生成包时,我收到错误:
[09:26:34.026] Can not find WiX tools (light.exe, candle.exe)
[09:26:34.026] Download WiX 3.0 or later from https://wixtoolset.org and add it to the PATH.
Run Code Online (Sandbox Code Playgroud)
问题的本质很清楚。jpackage
不支持WiX 4
,尽管它没有以纯文本形式写入任何地方。
解决方案也很明确,我安装了WiX 3 …
在某些情况下,我使用 jpackage 实用程序尝试创建一个签名的 DMG 文件以交付给我的用户。我需要签署这个DMG的原因是因为我想对软件进行公证。顺便说一句,我不确定是否可以(还)使用 jpackage 进行公证,但无论如何我都在尝试。
但是,我在使用 jpackage 的内置代码签名选项时遇到了麻烦,这是成功公证的先决条件。
我正在使用这些选项运行 jpackage --mac-sign --mac-package-signing-prefix CardrDebate --mac-signing-key-user-name "Developer ID Application: ********** (*******)"
(我已经编辑了实际的开发人员 ID,因为它在 StackOverflow 上是公开的)。
创建 jpackage 应用程序映像后,我通过导航到几个生成的 .dylib 文件并尝试测试了生成的代码是否实际签名codesign -vvv {filename}.dylib
,并且 codesign 表示该对象根本没有签名(不是它签名不正确,而是它只是根本没有签名)。
因此,我认为我的问题是由于我(可能)在 macOS 上错误地使用了 jpackage 的签名选项。我应该如何使用这些?
我正在尝试将使用 Izpack 创建的 Java 应用程序的 Windows 安装转换为使用 Java 14 中提供的 JPackage。安装程序构建并安装,但是当我尝试运行它创建的 exe 时它失败,但没有提供有关失败原因的信息。
是否有日志或某种方法可以找出它实际上无法启动的原因?
我正在使用 JPackage (OpenJDK 15.0.1) 为 Windows 制作一个可移植的可执行文件。我尝试了下面的命令,但双击生成的 exe 文件并显示安装程序窗口。它似乎不是可移植的可执行文件,而只是安装程序。
jpackage --name "Test App" --vendor "com.example" --type exe --input input --main-jar test-app-1.0.jar --main-class main.Main
Run Code Online (Sandbox Code Playgroud)
有没有办法制作一个可执行文件,无需使用JPackage安装即可使用?
我正在尝试使用 JPackage 创建 AppImage(在使用 OpenJDK 14 的 Ubuntu 18.04 系统上)
我找到的所有例子都是这样的形式
jpackage --type app-image --name myappimage --input target --main-jar myuberjar.jar --main-class myapplication.core --verbose
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我会得到一个目录./myappimage/
,其中./myappimage/bin/
有一个可执行文件,我可以启动它来运行该应用程序。但整个事情并没有像我希望的那样捆绑到一个 AppImage 文件中。
我在这里缺少什么?
如果已安装,则无法重新运行JPackage安装程序,第二次似乎只是在没有警告的情况下退出,这在 Windows 上是正确的行为吗?
你可能会问我为什么要这样做?
就我而言,我正在尝试为我的 Java 应用程序构建 JPackage 安装程序,因此我正在构建它并安装它,然后调整设置,重建它并尝试重新安装。我花了一些时间才发现除非我卸载第一个安装(使用控制面板,程序和功能),否则我无法重新安装它
我的案例可能不是通常的用例,但它在没有给出任何原因的情况下退出,感觉不正确。
这也意味着,如果我向客户部署新版本,并且稍后需要修改安装程序,则必须修改版本号才能让用户重新安装,这通常可能是最佳实践,但我并不是特别想要如果应用程序本身没有更改,则执行此操作。
更新:自从通过查看 TaskManager 发现它仍在运行,但似乎没有做任何事情并且没有向用户提供任何指示!
在 Linux 上创建 JPackage 安装程序 Java 应用程序的规范是什么?
我已经为 Windows 创建了一个安装程序,现在正在 Linux 上创建一个(使用 Ubuntu)
到目前为止,我有:
-i target/Jaikoz/buildLinux
--main-class com.jthink.jaikoz.Jaikoz
--name Jaikoz
--main-jar lib/jaikoz.jar
--app-version 10.1.0
--copyright "Copyright 2020 JThink Ltd, United Kingdom"
--arguments "-l2 -m2 -f" --java-options "-Dhttps.protocols=TLSv1.1,TLSv1.2"
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED"
--vendor JThink
--icon "Jaikoz64.png"
--install-dir /opt
--linux-menu-group Jaikoz
--linux-shortcut
Run Code Online (Sandbox Code Playgroud)
对于创建 debian 安装程序,它可以工作(安装尚未正常运行)但我对很多事情感到困惑,我对 linux 环境不太熟悉。
安装 jpackage 应用程序后,如何允许我的用户升级应用程序而不需要他们重新运行安装程序?我有哪些选项可以让用户升级?
一个理想的场景是底层 jar 将在运行时换出,并且应用程序将在同一进程中重新启动。我想这可能是不可能的吗?
我创建了一个 JavaFX 应用程序。它在我的 Intellij IDE 中完美运行。现在我想分发应用程序 - 即我想获得一个用户可以下载的安装程序,然后它会为他们安装应用程序。
我在这里找到了一篇非常有趣的文章。这篇博客文章基本上描述了我想要实现的目标。但是有两个区别:
我正在使用 Maven 而不是 Gradle
我有使用自动模块的依赖项,例如 iText7 和 apache.commons.lang3
自动模块的使用使事情变得非常复杂。有一个名为 ModiTect(这里)的 GitHub 项目已经被编写来解决这些问题。我没有使用 ModiTect 的经验,甚至我的 Maven 知识也几乎不存在(意思是:我真的不知道我在 pom.xml 中做什么)。
我正在寻找的是关于如何将 ModiTect(以及如果需要的话 jpackage)集成到我的 pom.xml 以便为我的 JavaFX 应用程序获取安装程序的解释(逐步)数据库,虽然这应该不是问题)。
有人可以提供此解释或向我推荐教程吗?
我在这个问题的末尾提供了一个 MWE。MWE 是一个 TestApp。要说明问题,请运行应用程序并按“打印 PDF”按钮。在资源中创建 pdf --> pdf
执行 javafx:run 时 MWE 会编译运行 执行 javafx:jlink 时会出现与 automodules 使用相关的错误
我不知道如何解决这个问题。ModiTect 似乎是一个很有前途的插件。另一种可能的方法可以在此GitHub 存储库中找到。但正如我之前所说:我的 Maven 知识不足以真正掌握这里发生的事情。任何帮助对我来说意义重大!
MWE:
pom.xml:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>TestApp</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties> …
Run Code Online (Sandbox Code Playgroud) 我最近查看了 jpackage 有任何选项会自动将应用程序添加到启动中,例如考虑我有,
应用程序.java
package org.openjfx;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
* JavaFX App
*/
public class App extends Application {
@Override
public void start(Stage stage) {
var label = new Label("Hello, JavaFX");
var scene = new Scene(new StackPane(label), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
Run Code Online (Sandbox Code Playgroud)
模块信息.java
module Sample {
requires javafx.controls;
opens org.openjfx;
}
Run Code Online (Sandbox Code Playgroud)
使用maven生成运行时,
mvn javafx:jlink
Run Code Online (Sandbox Code Playgroud)
然后生成安装程序,
jpackage --win-dir-chooser --runtime-image ./target/image/ --name Sample-Javafx --module Sample/org.openjfx.App …
Run Code Online (Sandbox Code Playgroud)