运行java-jar时包含外部jar

运行java-jar时包含外部jar,java,jar,classpath,manifest.mf,Java,Jar,Classpath,Manifest.mf,根据我的读数,当您执行以下命令时: java -jar foo.jar 然后忽略主类路径,并从清单文件获取类路径 此外,命令行上声明的类路径也被忽略。因此: java -classpath /usr/local/jar/foobar.jar -jar foo.jar /忽略usr/local/jar/foobar.jar 最后,我读到manifest文件只能在jar文件中包含相对路径 那么,如何包含外部jar的绝对路径,这些jar存在于系统上,但不在正在执行的jar文件中?您可以在拥有jar

根据我的读数,当您执行以下命令时:

java -jar foo.jar
然后忽略主类路径,并从清单文件获取类路径

此外,命令行上声明的类路径也被忽略。因此:

java -classpath /usr/local/jar/foobar.jar -jar foo.jar
/忽略usr/local/jar/foobar.jar

最后,我读到manifest文件只能在jar文件中包含相对路径


那么,如何包含外部jar的绝对路径,这些jar存在于系统上,但不在正在执行的jar文件中?

您可以在拥有jar文件的文件夹中创建一个文件夹,比如lib

Manifest.MF内容可以是:

Main-Class: com.mastergaurav.test.app.MainClass
Class-Path: lib/one.jar lib/two.jar
文件夹内容:

mainFolder/
   * lib/one.jar
   * lib/two.jar
   * my-main.jar
执行:

java -jar my-main.jar

您为什么要避免像这样调用主类

java -cp /usr/local/jar/foobar.jar:/some/other/path.jar com.your.main.classname
?


这种类型的调用允许您混合绝对路径和相对路径。将其放入shell脚本或批处理文件中,以避免实际键入或记住完整的类路径来简化操作。

顺便说一句,如果执行java-cp/addional/class/path-jar abcd.jar,则不会忽略addional类路径。您完全不知道我搜索了多长时间。谢谢。我如何将
类路径设置为要编译的jar中的jar?@Arin据我所知,如果不编写自定义类加载器,这是不可能的。即便如此,从一天半的峰值来看,这似乎是不可能的。见上面和下面AlikElzin kilaka的评论。当然,你可以探索一个罐子。这个实用的建议+1!Oracle/SUN真的应该反对-jar选项。。。这是一个反复出现的噩梦……在某些情况下,使用
-jar
会容易得多,但是如果你发现简化的选项给你带来麻烦,那么回过头来选择让你完全控制的选项总是有意义的。我想,在Windows上应该有一个分号,而不是jar路径之间的冒号。请核对这些答案注意:类路径头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或可通过Internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的jar文件,则不能使用MyJar.jar清单中的类路径头将MyUtils.jar中的类加载到类路径中。“来源: