【发布时间】:2022-01-06 10:24:45
【问题描述】:
我需要在 Linux 上运行 Java 应用程序(“Exactly”)。它是一个传输数据的软件,由我必须与之合作的机构使用。 https://www.weareavp.com/products/exactly/ 代码库在这里:https://github.com/WeAreAVP/uk-exactly
不幸的是,程序网站只提供 Mac 和 Windows 的下载,但本质上它是一个 Java 应用程序。不过,到目前为止,Java 应用程序运行在每个支持虚拟 Java 机器的平台上。对于旧版本的“Exactly”,还有一个专用的 .jar 下载可用。在当前的“Exactly”用户指南 (https://www.weareavp.com/wp-content/uploads/2018/06/Exactly-User-Guide_v.0.1.5.pdf) 中,我发现了这句话:“Java jar 文件现在包含在Windows则则也就是两个Windows包 /dist路径)Windows。
我从 64 位包中下载并解压了 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 开发人员,所以我不知道如何在 Ubuntu Linux 上运行 .jar 文件。我尝试了一些在 Internet 上找到的解决方案(见下文),但没有一个效果很好。欢迎任何帮助和建议!
我的环境: 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.run、launchExactly 和 stub.sh 文件是我按照我在 Internet 上找到的建议解决方案中的说明创建的(见下文)
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
我的互联网研究导致了各种建议的解决方案,但没有一个成功:
解决方案 1 创建一个 bash 脚本:
https://edencoding.com/runtime-components-error/#jar
另请参阅:Convert .jar to an application for 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 将 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
附加 .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 使用命令行参数启动 .jar:
How do I fix JavaFX runtime components are missing?
$ 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 下运行是否有任何价值。
【问题讨论】:
-
为他们使用 jpackage 为您创建其软件的 .rpm 和 .deb 发行版的开发人员创建一个 feature request。
-
@jewelsea 感谢您的建议。我创建了一个功能请求:github.com/WeAreAVP/uk-exactly/issues/22
标签: java linux javafx jar ubuntu-18.04