Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用本机依赖项和.JAR依赖项从终端(Runtime.getRuntime().exec)运行JAR文件_Java_Linux_Jar_Path_Classpath - Fatal编程技术网

Java 使用本机依赖项和.JAR依赖项从终端(Runtime.getRuntime().exec)运行JAR文件

Java 使用本机依赖项和.JAR依赖项从终端(Runtime.getRuntime().exec)运行JAR文件,java,linux,jar,path,classpath,Java,Linux,Jar,Path,Classpath,我在从终端运行JAR文件时遇到问题,该终端同时具有本机依赖项和.JAR依赖项。好的,我的目标不是从终端运行它,而是使用Java的Runtime.getRuntime().exec函数作为一个单独的进程运行它,但是如果我不能从终端运行它,那么我也不能通过。我试图运行的JAR文件依赖于许多其他JAR文件以及许多.so库。我试图将所有.jar依赖项和.so依赖项放在它们自己的文件夹中,然后使用以下内容运行jar文件: java -cp /home/johnmichaelreed/Desktop/Dro

我在从终端运行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/*'Main

尝试使用命令行参数时:


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添加到类路径,然后指定要运行的主类。您还可以在jar清单中指定jar依赖项

请查看更多详细信息


假设您的主类被调用在
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

我要说的是,命令的shell扩展(解析*)使整行不正确,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/johnmichaelreed/Desktop/Dropbox/Libjitsi_linux_64/*'main.main”指定我希望本机Linux 64文件夹保存.so文件,我希望运行应用程序的jar和Libjitsi_Linux_64 libraries文件夹中的所有内容,并且包含main方法的类的名称称为“main”。此外,*通配符不是递归的,对吗?比如,如果我在libraries文件夹和libraries文件夹的子文件夹中有相同的.jar文件,它将不会加载该jar文件两次。好的,你比我的编辑速度快,不客气:)哦,等等。它正在运行,但没有加载本机库。如何处理本机库和命令行参数?嗯,您是否尝试过改变参数?那么首先是
-Djava.library.path