运行 来自终端的 JAR 文件 (Runtime.getRuntime().exec) 具有本机和 .jar 依赖项

Running JAR file from terminal (Runtime.getRuntime().exec) with both native and .jar dependencies

我在从同时具有本机和 .jar 依赖项的终端中 运行 生成 JAR 文件时遇到问题。好的,我的目标不是从终端 运行 它,而是 运行 它作为一个单独的进程与 Java 的 Runtime.getRuntime().exec 函数,但是如果我不能从终端 运行 它,那么我也不能 运行 它通过。我尝试 运行 的 JAR 文件取决于许多其他 jar 文件以及许多 .so 库。我试图将所有 .jar 依赖项和 .so 依赖项放在它们自己的文件夹中,然后 运行 jar 文件:

java -cp /home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/* -Djava.library.path=/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/lib/native/linux-64/* -jar /home/johnmichaelreed/NetBeansProjects/SendReceive/dist/SendReceive.jar

其中“/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/”包含所有 JAR 文件,“/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/lib/native/linux-64/”包含所有 .so 文件和主 JAR 运行 的文件是“/home/johnmichaelreed/NetBeansProjects/SendReceive/dist/SendReceive.jar”,但我不断收到此错误:

Error: Could not find or load main class 
.home.johnmichaelreed.Desktop.Dropbox.Libjitsi_linux_64.some-compressed-jar-file.jar

其中 some-compressed-jar-file.jar 是我的应用程序应该使用的 .jar 文件之一。

这是我的 Java JAR 依赖文件夹:

这是我的原生库依赖文件夹:

更新:

好的,这是解决方案:

java -Djava.library.path=/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/lib/native/linux-64 -cp '/home/johnmichaelreed/NetBeansProjects/SendReceive/dist/SendReceive.jar:/home/j ‌ ohnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/*' 主

尝试命令行参数:

java -Djava.library.path=/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/lib/native/linux-64 -cp '/home/johnmichaelreed/NetBeansProjects/SendReceive/dist/SendReceive.jar:/home/j ‌ ohnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/*' 主"arg"

您不能同时使用 -jar-cp

您可以做的是将您的 jar 添加到 class 路径,然后将您的 Main class 指定为 运行。您还可以在 jar 的清单中指定 jar 依赖项。

请查看here了解更多详情。


假设您的 Main class 在调用 Main 中并且在包 foo.bar 中,那么可能的调用可能如下所示:

java -cp "/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/*;/home/johnmichaelreed/NetBeansProjects/SendReceive/dist/SendReceive.jar" -Djava.library.path="/home/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/lib/native/linux-64/*" foo.bar.Main