簡體   English   中英

jPackage - Wix - 應用程序無法啟動,但沒有診斷消息

[英]jPackage - Wix - App doesn’t launch, but there are no diagnostic messages

我一直在嘗試 package 我的 java javafx 桌面應用程序在 ZAEA234298CE3AA9B448B33D21F46Z javafx 桌面應用程序上使用 jPackage

該應用程序在 Netbeans 下運行良好,但是當我單擊安裝程序生成的快捷方式或嘗試使用命令行界面運行它時,沒有任何反應(沒有錯誤消息)。

我正在使用 java 版本 17.0.1 2021-10-19 LTS

問題

我一直無法發現錯誤是什么。 它在 Netbeans 中運行得非常愉快,所以我認為這與我設置 JPackage arguments 的方式有關,但我看不出錯誤是什么。 如果沒有任何診斷消息,就很難診斷問題。

  1. 應用程序啟動失敗時如何查看任何消息?
  2. 我正在使用 JavaFX 模塊。 我應該在我的 class 路徑庫文件夾中包含 javafx jar 文件嗎? 我猜我不應該因為我包含模塊。
  3. 我是否應該通過創建控制台啟動器來嘗試從控制台運行它。 我還不知道怎么做,但會調查。 我可能會看到診斷錯誤和系統輸出消息。
  4. 應用啟動器是否顯示任何可能有助於診斷問題的診斷消息。

我做了什么來創建應用程序安裝程序

在運行 JPackage 之前,我創建了一個“Package”目錄並將 jar 主文件和其他應用程序文件復制到其中的“config”目錄中。 然后我將配置目錄定義為輸入目錄。 output 目錄到我的當前目錄。 (參見下面的 jPackage 命令)。

因此,我的打包目錄結構是...

jPackage目錄結構

配置文件包含以下內容:

在此處輸入圖像描述

libs 文件夾包含 jars 列表,例如 log4j 等,mods 文件夾下是 javaFX 17 個模塊。

PictureTool4-1.0.exe是JPackage生成的安裝程序,命令如下:

c:\Dev\Package\PictureTool4\Package>jPackage --name pictureTool4 --input config  --main-jar PictureTool4-4-0.jar  --module-path mods\javafx-jmods-17.0.1 --add-modules javafx.media,javafx.fxml,javafx.swing,javafx.controls,javafx.graphics --win-dir-chooser --win-shortcut

PictureTool4-4-0.jar中的Manifest文件包含主要的class:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.6.3
Built-By: User
Build-Jdk: 17.0.1
Class-Path: libs/log4j-api-2.13.0.jar etc ... list of jars)
Main-Class: omac.main.JFXPictureToolMain

我還嘗試了什么…… *

1 添加了系統退出消息。

緊接着應用程序主...

    public static void main(String[] args) {
            System.out.println("PictureTool4 has started");
    launch(args);
}
  1. 添加了啟動畫面

並通過將--java-options "-splash:\$APPDIR/PictureTool-Splash.jpg"添加到 jPackage arguments 來添加啟動屏幕。

該應用程序沒有顯示啟動畫面或任何消息。

參考

Stackoverflow.com 在 Java 你如何調試 JPackage 創建的 exe

https://docs.oracle.com/en/java/javase/14/jpackage/packaging-tool-user-guide.pdf

您的命令行未提及其他 SO 帖子中引用的--win-console ,因此請確保首先處於活動狀態。

然后檢查您是否已陷入此陷阱 - 如果您的應用程序版本相同,則第二個安裝程序永遠不會運行

完成上述操作並重新構建后,正確卸載最后安裝的版本並使用新的jpackage安裝程序重新安裝。

如果 EXE 仍然不起作用,請仔細檢查您是否具有所需的應用程序依賴項並測試jpackage為您構建的隱式jlink實際包含依賴項的 Java 運行時。 這從命令行很簡單,只需使用新的 JRE HOME 運行 Java 應用程序:

set "APP_HOME=C:\Program Files\YOUR_APP"
%JAVA_HOME%\runtime\bin\java -cp %APP_HOME%\app\PictureTool4-4-0.jar your.Main

如果上述方法不起作用,則您錯過了庫。 考慮顯式使用 jlink( 如本答案所示),因為如果您的應用程序 jar 模塊依賴項沒有更改,則無需使用jpackage制作的隱式jlink重新生成 JRE。

如何將我的 Java 程序轉換為 an.exe 文件?

我現在已經解決了我的打包問題,應用程序現在正在運行。 我決定,我會在這里發布我的解決方案,而不是作為我的問題的更新。

我分三步完成了包裝:

  1. 將應用程序更改為在應用程序目錄中查找其屬性文件。
  2. 確定了我的應用程序 java 模塊依賴項。
  3. 使用模塊列表、我的應用程序的 jar 和我的應用程序使用的公共 jars 來構建我的應用程序 windows 安裝程序。

第 1 步我的應用程序在根目錄中查找屬性文件。 然而,由 jPackage 生成的應用安裝程序會創建一個運行時和一個應用目錄。 根目錄只包含一個app exe文件和一個ico文件。 jPackage 將 -input 參數中定義的目錄中的所有文件復制到應用程序目錄,包括我的屬性文件。 因此,我將我的應用程序更改為查看應用程序目錄而不是根目錄。

Step 2 - To determine what java modules my app needed I used jdeps with my apps jar file, javaFX jars (not modules) and the public jars my app uses, to produce a list of packages my app needs. 這不是一個非常用戶友好的列表,但我能夠手動創建我需要的 java 模塊的列表。

當我運行 jdeps 時,出現錯誤“未找到模塊 java.xml.bind 所需的模塊 java.activation。” 如下:

    C:\Dev\Package\PictureTool4\Package>jdeps  -summary  --multi-release 17 config/PictureTool4-4.0.jar config/libs/apiguardian-api-1.1.0.jar config/libs/commons-csv-1.4.jar config/libs/javassist-3.28.0-GA.jar config/libs/javax.activation-api-1.2.0.jar config/libs/log4j-api-2.13.0.jar config/libs/log4j-core-2.13.0.jar config/libs/jaxb-api-2.3.1.jar config/libs/jaxb-core-2.3.0.1.jar config/libs/jaxb-impl-2.3.1.jar jfxlib/javafx.controls.jar jfxlib/javafx.controls.jar jfxlib/javafx.fxml.jar jfxlib/javafx.swing.jar jfxlib/javafx.base.jar jfxlib/javafx.graphics.jar
Exception in thread "main" java.lang.module.FindException: Module java.activation not found, required by java.xml.bind
        at java.base/java.lang.module.Resolver.findFail(Resolver.java:893)
        at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
        at java.base/java.lang.module.Resolver.resolve(Resolver.java:141)
        at java.base/java.lang.module.Configuration.resolve(Configuration.java:421)
        at java.base/java.lang.module.Configuration.resolve(Configuration.java:255)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:603)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:557)
        at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
        at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)

我假設 jaxb 導致了這個問題,所以我從列表中刪除了 jars。 我不知道為什么 jDeps 抱怨,但我猜是因為 jaxb 2.3.1 與 Java SE 17 不兼容。我會做一些進一步的研究。 當我再次運行 jDeps 時,它給了我一個包列表,如下所示:

`C:\Dev\Package\PictureTool4\Package>jdeps  -summary --multi-release 17 config/PictureTool4-4.0.jar config/libs/apiguardian-api-1.1.0.jar config/libs/commons-csv-1.4.jar config/libs/javassist-3.28.0-GA.jar config/libs/javax.activation-api-1.2.0.jar config/libs/log4j-api-2.13.0.jar config/libs/log4j-core-2.13.0.jar jfxlib/javafx.controls.jar jfxlib/javafx.fxml.jar jfxlib/javafx.swing.jar jfxlib/javafx.base.jar jfxlib/javafx.graphics.jar
    PictureTool4-4.0.jar -> config\libs\commons-csv-1.4.jar
    PictureTool4-4.0.jar -> java.base
    PictureTool4-4.0.jar -> java.datatransfer
    PictureTool4-4.0.jar -> java.desktop
    PictureTool4-4.0.jar -> java.logging
    PictureTool4-4.0.jar -> java.prefs
    PictureTool4-4.0.jar -> java.xml
    PictureTool4-4.0.jar -> javafx.base
    PictureTool4-4.0.jar -> javafx.controls
    PictureTool4-4.0.jar -> javafx.fxml
    PictureTool4-4.0.jar -> javafx.graphics
    PictureTool4-4.0.jar -> javafx.swing
    PictureTool4-4.0.jar -> not found
    PictureTool4-4.0.jar -> org.apache.logging.log4j
    commons-csv-1.4.jar -> java.base
    commons-csv-1.4.jar -> java.sql
    javafx.base -> java.base
    javafx.base -> java.desktop
    javafx.base -> jdk.jfr
    javafx.controls -> java.base
    javafx.controls -> javafx.base
    javafx.controls -> javafx.graphics
    javafx.fxml -> java.base
    javafx.fxml -> java.scripting
    javafx.fxml -> java.xml
    javafx.fxml -> javafx.base
    javafx.fxml -> javafx.graphics
    javafx.graphics -> java.base
    javafx.graphics -> java.desktop
    javafx.graphics -> java.xml
    javafx.graphics -> javafx.base
    javafx.graphics -> jdk.unsupported
    javafx.swing -> java.base
    javafx.swing -> java.datatransfer
    javafx.swing -> java.desktop
    javafx.swing -> javafx.base
    javafx.swing -> javafx.graphics
    javafx.swing -> jdk.unsupported.desktop
    javassist-3.28.0-GA.jar -> java.base
    javassist-3.28.0-GA.jar -> java.desktop
    javassist-3.28.0-GA.jar -> java.instrument
    javassist-3.28.0-GA.jar -> java.management
    javassist-3.28.0-GA.jar -> jdk.attach
    javassist-3.28.0-GA.jar -> jdk.jdi
    javax.activation-api-1.2.0.jar -> java.base
    javax.activation-api-1.2.0.jar -> java.datatransfer
    javax.activation-api-1.2.0.jar -> not found
    log4j-core-2.13.0.jar -> config\libs\commons-csv-1.4.jar
    log4j-core-2.13.0.jar -> java.base
    log4j-core-2.13.0.jar -> java.compiler
    log4j-core-2.13.0.jar -> java.desktop
    log4j-core-2.13.0.jar -> java.logging
    log4j-core-2.13.0.jar -> java.management
    log4j-core-2.13.0.jar -> java.naming
    ...etc
`

Jdeps 確定了我需要包含在應用程序運行時中的 21 個模塊。

第 3 步- 包裝。 我使用了步驟 2 中確定的 21 個依賴項,並使用 jPackage 構建了安裝程序,如下所示:

jPackage --name PictureTool4 --input config  --main-jar PictureTool4-4.0.jar --win-dir-chooser --win-shortcut --module-path mods\javafx-jmods-17.0.1 --add-modules javafx.media,javafx.fxml,javafx.swing,javafx.controls,javafx.graphics,java.datatransfer,java.desktop,java.logging,java.prefs,java.xml,java.sql,java.scripting,jdk.unsupported.desktop,java.instrument,java.management,jdk.attach,jdk.jdi,java.compiler,java.naming,java.rmi

然后我安裝了該應用程序,它按預期工作。

我是 Stack Overflow 的新手,非常感謝您的幫助。

目錄結構

目錄結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM