簡體   English   中英

如何在 Linux 中運行為 Windows 和 Mac 構建的 .jar 文件?

[英]How can I run a .jar file that was build for Windows and Mac in Linux?

我需要在Linux上運行一個Java應用程序(“Exactly”)。它是一個傳輸數據的軟件,我必須與之合作的機構使用。 https://www.weareavp.com/products/exactly/代碼庫在這里: https://github.com/WeAreAVP/uk-exactly

不幸的是,程序網站僅提供 Mac 和 Windows 的下載,但本質上它是一個 Java 應用程序。 直到現在,Java 應用程序在支持虛擬 Java 機器的每個平台上運行。 對於“Exactly”的舊版本,還有專門的 .jar 下載可用。 在當前的“確切”用戶指南( https://www.weareavp.com/wp-content/uploads/2018/06/Exactly-User-Guide_v.0.1.5.pdf )中,我發現了這句話:“Java jar 文件是現在包含在兩個 Windows 包(32 或 64)中的任何一個中。解壓縮 Windows package 后,您可以運行 Java jar 文件(位於 /dist 路徑中)。

我從 64 位 package 下載並解壓了 Java 文件到目錄: ~/java-anwendungen/exactly/

~/java-anwendungen/exactly/dist中,我找到了exactly.jar文件。 我使它可執行並嘗試啟動它但沒有成功。

$ java -jar exactly.jar
Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen
(Error: to execute this app needed JavaFX-runtime-components missing)

我不是 Java 開發人員,所以我不知道如何繼續,讓 .jar 文件在 Ubuntu Linux 上運行。我嘗試了在 Inte.net 中找到的一些解決方案(見下文),但沒有一個解決方案很好。 歡迎任何幫助和建議!

我的環境:ubuntu 18.04.6 LTS

$ java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing)

確切的目錄:

(base) viejo@notebooka:~/java-anwendungen/exactly/dist$ ls -l
insgesamt 488
drwx------ 2 viejo viejo   4096 Nov 26 18:48 bundles
-rw-rw-r-- 1 viejo viejo    696 Nov 27 01:22 derby.log
-rwxrwxr-x 1 viejo viejo 236145 Sep 19  2017 exactly.jar
-rwxrwxr-x 1 viejo viejo 236352 Nov 26 19:27 exactly.run
-rwxrwxr-x 1 viejo viejo    198 Nov 26 19:14 launchExactly
drwx------ 2 viejo viejo   4096 Nov 26 18:48 lib
-rw-rw-r-- 1 viejo viejo      0 Nov 27 01:22 logfile.txt
-rw-rw-r-- 1 viejo viejo    207 Nov 26 19:24 stub.sh
drwxrwxr-x 5 viejo viejo   4096 Nov 27 01:22 ukexactly

注意:文件exactly.runlaunchExactlystub.sh是我按照我在ukexactly中找到的建議解決方案中的logfile.txt derby.log的(見下文) 3.

我找到的目錄 javafx(從 Ubuntu 存儲庫安裝后):

(base) viejo@notebooka:/usr/share/openjfx/lib$ ls -l
insgesamt 6500
lrwxrwxrwx 1 root root      26 Feb 19  2019 javafx.base.jar -> ../../java/javafx-base.jar
lrwxrwxrwx 1 root root      30 Feb 19  2019 javafx.controls.jar -> ../../java/javafx-controls.jar
lrwxrwxrwx 1 root root      26 Feb 19  2019 javafx.fxml.jar -> ../../java/javafx-fxml.jar
lrwxrwxrwx 1 root root      30 Feb 19  2019 javafx.graphics.jar -> ../../java/javafx-graphics.jar
lrwxrwxrwx 1 root root      27 Feb 19  2019 javafx.media.jar -> ../../java/javafx-media.jar
-rw-r--r-- 1 root root     113 Feb 19  2019 javafx.properties
lrwxrwxrwx 1 root root      27 Feb 19  2019 javafx.swing.jar -> ../../java/javafx-swing.jar
lrwxrwxrwx 1 root root      25 Feb 19  2019 javafx.web.jar -> ../../java/javafx-web.jar
-rw-r--r-- 1 root root 6651322 Feb 19  2019 src.zip

符號鏈接指向的目錄:

(base) viejo@notebooka:/usr/share/java$ ls -l
insgesamt 10900
-rw-r--r-- 1 root root    5232 Feb 21  2019 gettext.jar
-rw-r--r-- 1 root root   35257 Apr 25  2018 java-atk-wrapper.jar
-rw-r--r-- 1 root root    2989 Sep 20  2018 java_defaults.mk
-rw-r--r-- 1 root root  749850 Feb 19  2019 javafx-base-11.jar
lrwxrwxrwx 1 root root      18 Feb 19  2019 javafx-base.jar -> javafx-base-11.jar
-rw-r--r-- 1 root root 2510966 Feb 19  2019 javafx-controls-11.jar
lrwxrwxrwx 1 root root      22 Feb 19  2019 javafx-controls.jar -> javafx-controls-11.jar
-rw-r--r-- 1 root root  127377 Feb 19  2019 javafx-fxml-11.jar
lrwxrwxrwx 1 root root      18 Feb 19  2019 javafx-fxml.jar -> javafx-fxml-11.jar
-rw-r--r-- 1 root root 4365220 Feb 19  2019 javafx-graphics-11.jar
lrwxrwxrwx 1 root root      22 Feb 19  2019 javafx-graphics.jar -> javafx-graphics-11.jar
-rw-r--r-- 1 root root  270551 Feb 19  2019 javafx-media-11.jar
lrwxrwxrwx 1 root root      19 Feb 19  2019 javafx-media.jar -> javafx-media-11.jar
-rw-r--r-- 1 root root  119827 Feb 19  2019 javafx-swing-11.jar
lrwxrwxrwx 1 root root      19 Feb 19  2019 javafx-swing.jar -> javafx-swing-11.jar
-rw-r--r-- 1 root root  714674 Feb 19  2019 javafx-web-11.jar
lrwxrwxrwx 1 root root      17 Feb 19  2019 javafx-web.jar -> javafx-web-11.jar
-rw-r--r-- 1 root root    5385 Nov 18 14:52 java_uno.jar
-rw-r--r-- 1 root root     368 Nov 18 14:52 juh-7.2.3.jar
lrwxrwxrwx 1 root root      13 Nov 18 14:52 juh.jar -> juh-7.2.3.jar
-rw-r--r-- 1 root root     356 Nov 18 14:52 jurt-7.2.3.jar
lrwxrwxrwx 1 root root      14 Nov 18 14:52 jurt.jar -> jurt-7.2.3.jar
-rw-r--r-- 1 root root    2613 Feb 21  2019 libintl.jar
-rw-r--r-- 1 root root 2191511 Nov 18 14:52 libreoffice-7.2.3.jar
lrwxrwxrwx 1 root root      21 Nov 18 14:52 libreoffice.jar -> libreoffice-7.2.3.jar
-rw-r--r-- 1 root root     356 Nov 18 14:52 ridl-7.2.3.jar
lrwxrwxrwx 1 root root      14 Nov 18 14:52 ridl.jar -> ridl-7.2.3.jar
-rw-r--r-- 1 root root     356 Nov 18 14:52 unoil-7.2.3.jar
lrwxrwxrwx 1 root root      15 Nov 18 14:52 unoil.jar -> unoil-7.2.3.jar
-rw-r--r-- 1 root root    4727 Nov 18 14:52 unoloader-7.2.3.jar
lrwxrwxrwx 1 root root      19 Nov 18 14:52 unoloader.jar -> unoloader-7.2.3.jar

我的 inte.net 研究導致了各種提議的解決方案,但都沒有成功:

解決方案 1 創建一個 bash 腳本:

https://edencoding.com/runtime-components-error/#jar

另請參閱: 將 jar 轉換為適用於 Windows、Linux 和 Mac 的應用程序

我的 bash 文件: launchExactly

#!/bin/bash

java -jar exactly.jar --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml
$ ./launchExactly
Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen

解決方案2 append jar 到bash腳本:

https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable

創建一個 bash 文件:

    #!/bin/sh
    MYSELF=`which "$0" 2>/dev/null`
    [ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
    java=java
    if test -n "$JAVA_HOME"; then
        java="$JAVA_HOME/bin/java"
    fi
    exec "$java" $java_args -jar $MYSELF "$@"
    exit 1 

Append.jar文件:

cat stub.sh exaxtly.jar > exactly.run && chmod +x exactly.run

也無法啟動 jar:

$ exactly.run
exactly.run: Befehl nicht gefunden. (command not found)

$ ./exactly.run
Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen
(error: JavaFX-runtime-components needed to execute app missing)

解決方案 3 start.jar 在命令行上帶有參數:

如何修復 JavaFX 運行時組件丟失?

$ java --module-path /usr/share/openjfx/lib --add-modules ALL-MODULE-PATH -jar exactly.jar

結果:

$  java --module-path /usr/share/openjfx/lib --add-modules ALL-MODULE-PATH -jar exactly.jar
[EL Info]: 2021-11-27 01:22:39.859--ServerSession(255728718)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Info]: connection: 2021-11-27 01:22:40.605--ServerSession(255728718)--file:/home/viejo/java-anwendungen/exactly/dist/exactly.jar_UKSipperflyPU login successful
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:217)
    at uk.sipperfly.ui.Exactly.<init>(Exactly.java:107)
    at uk.sipperfly.ui.Exactly$83.run(Exactly.java:2971)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

創建的 derby.log 文件包含以下信息:

----------------------------------------------------------------
Mon Nov 29 12:59:52 CET 2021:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.11.1.1 - (1616546): instance a816c00e-017d-$
on database directory /home/viejo/java-anwendungen/exactly/dist/ukexactly with class loader java.net.URLClassLoader@$
Loaded from file:/home/viejo/java-anwendungen/exactly/dist/lib/derby.jar
java.vendor=Ubuntu
java.runtime.version=11.0.11+9-Ubuntu-0ubuntu2.18.04
user.dir=/home/viejo/java-anwendungen/exactly/dist
os.name=Linux
os.arch=amd64
os.version=5.4.0-90-generic
derby.system.home=null
Database Class Loader started - derby.database.classpath=''

創建的 logfile.txt 為空。

這種嘗試是最有希望的,因為至少 .jar 開始了,但很快就在上面的錯誤消息中結束了。

注意:通過使用解決方案 3 中的參數更改解決方案 1 的 bash 腳本來組合解決方案 1 和 3 會導致與解決方案 3 相同的錯誤。

現在我被卡住了,現在不知道如何繼續,或者嘗試讓 .jar 文件在 Linux 下運行是否有任何價值。

您的錯誤似乎與另一個問題有關,而不是與 Java 依賴項有關。 請在遷移項目或創建 jar 文件時檢查是否缺少任何圖像文件。

如果可能的話,您能否粘貼您嘗試運行的代碼的代碼或屏幕截圖?

您需要一個 Java 8 的實例。較新的版本不再具有 JavaFX 庫。

暫無
暫無

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

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