标签: jpackage

将 jpackage 与 WiX 4 结合使用

我正在尝试打包一个适用jpackage于 Windows 的应用程序。我正在使用Java 19WiX 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 …

java jpackage

12
推荐指数
1
解决办法
1344
查看次数

使用 jpackage 实用程序的代码签名 + 公证在 macOS 上不起作用

在某些情况下,我使用 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 的签名选项。我应该如何使用这些?

java deployment notarize java-14 jpackage

10
推荐指数
1
解决办法
1982
查看次数

在 Java 中,您如何调试 JPackage 创建的 exe

我正在尝试将使用 Izpack 创建的 Java 应用程序的 Windows 安装转换为使用 Java 14 中提供的 JPackage。安装程序构建并安装,但是当我尝试运行它创建的 exe 时它失败,但没有提供有关失败原因的信息。

是否有日志或某种方法可以找出它实际上无法启动的原因?

java izpack java-14 jpackage

7
推荐指数
1
解决办法
481
查看次数

如何使用JPackage制作可移植的可执行文件?

我正在使用 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安装即可使用?

java exe portable-executable jpackage

7
推荐指数
1
解决办法
2907
查看次数

使用JPackage制作AppImage

我正在尝试使用 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 文件中。

我在这里缺少什么?

java appimage jpackage

6
推荐指数
1
解决办法
3408
查看次数

如果已安装,则无法重新运行 Java JPackage 安装程序,第二次只是退出而不发出警告

如果已安装,则无法重新运行JPackage安装程序,第二次似乎只是在没有警告的情况下退出,这在 Windows 上是正确的行为吗?

你可能会问我为什么要这样做?

就我而言,我正在尝试为我的 Java 应用程序构建 JPackage 安装程序,因此我正在构建它并安装它,然后调整设置,重建它并尝试重新安装。我花了一些时间才发现除非我卸载第一个安装(使用控制面板,程序和功能),否则我无法重新安装它

我的案例可能不是通常的用例,但它在没有给出任何原因的情况下退出,感觉不正确。

这也意味着,如果我向客户部署新版本,并且稍后需要修改安装程序,则必须修改版本号才能让用户重新安装,这通常可能是最佳实践,但我并不是特别想要如果应用程序本身没有更改,则执行此操作。

更新:自从通过查看 TaskManager 发现它仍在运行,但似乎没有做任何事情并且没有向用户提供任何指示!

java installation java-14 jpackage

6
推荐指数
1
解决办法
1346
查看次数

在 Linux 上创建 JPackage 安装程序 Java 应用程序时,linux-menu-group 应该是什么?

在 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 环境不太熟悉。

  • 看不到linux-menu-grouplinux-shortcut的效果
  • 我应该使用linux-menu-group还是linux-app-category,如果是,它是一个预定义的列表吗?

java linux jpackage

6
推荐指数
1
解决办法
222
查看次数

如何在不运行其他安装程序的情况下升级 jpackage 应用程序?

安装 jpackage 应用程序后,如何允许我的用户升级应用程序而不需要他们重新运行安装程序?我有哪些选项可以让用户升级?

一个理想的场景是底层 jar 将在运行时换出,并且应用程序将在同一进程中重新启动。我想这可能是不可能的吗?

java kotlin jpackage

6
推荐指数
1
解决办法
325
查看次数

分发使用自动模块的 JavaFX 应用程序

我创建了一个 JavaFX 应用程序。它在我的 Intellij IDE 中完美运行。现在我想分发应用程序 - 即我想获得一个用户可以下载的安装程序,然后它会为他们安装应用程序。

我在这里找到了一篇非常有趣的文章。这篇博客文章基本上描述了我想要实现的目标。但是有两个区别:

  1. 我正在使用 Maven 而不是 Gradle

  2. 我有使用自动模块的依赖项,例如 iText7 和 apache.commons.lang3

自动模块的使用使事情变得非常复杂。有一个名为 ModiTect(这里)的 GitHub 项目已经被编写来解决这些问题。我没有使用 ModiTect 的经验,甚至我的 Maven 知识也几乎不存在(意思是:我真的不知道我在 pom.xml 中做什么)。

我正在寻找的是关于如何将 ModiTect(以及如果需要的话 jpackage)集成到我的 pom.xml 以便为我的 JavaFX 应用程序获取安装程序的解释(逐步)数据库,虽然这应该不是问题)。

有人可以提供此解释或向我推荐教程吗?

我在这个问题的末尾提供了一个 MWE。MWE 是一个 TestApp。要说明问题,请运行应用程序并按“打印 PDF”按钮。在资源中创建 pdf --> pdf

执行 javafx:ru​​n 时 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)

deployment javafx jlink moditect jpackage

6
推荐指数
1
解决办法
182
查看次数

如何使用jpackage添加程序启动?

我最近查看了 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)

java installation windows-installer javafx jpackage

6
推荐指数
1
解决办法
540
查看次数