我的jar文件中的目录是这样的:
remote.jar
中的
-com
-lib
-META-INF
META-INF
下的是文件MANIFEST.MF
:
Manifest-Version: 1.0
Class-Path: lib/*
Main-Class: com.xx.xx.Main
并且所有jar都在lib
文件夹下。
当我运行java -jar remote.jar
时,从命令行给我ClassNotFoundException
,未找到的类位于lib
文件夹下的其中一个jar中。如果main
函数没有引用lib中的任何类,则命令行运行没有问题。
我的问题是为什么它无法在lib下的jar中找到类。
编辑:
文件夹lib
答案 0 :(得分:2)
问题是清单中的Class-Path属性不像您认为的那样。见http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html
注意:Class-Path标头指向上的类或JAR文件 本地网络,而不是JAR文件中的JAR文件或可访问的类 通过互联网协议。在JAR中的JAR文件中加载类 将文件放入类路径中,必须编写自定义代码来加载它们 类。例如,如果MyJar.jar包含另一个名为的JAR文件 MyUtils.jar,你不能在MyJar.jar中使用Class-Path头 显示将MyUtils.jar中的类加载到类路径中。
最简单的解决方案是将类路径jar放在jar之外,并创建一个小的批处理文件或shell脚本来构造类路径并调用jar。
答案 1 :(得分:1)
我担心设置您的MANIFEST
Class-path
不会让您成功加载来自nested
个罐子的类(即罐子里的 ,如链接中所述)伊恩的回答)。
如果要打包单个可执行jar,最好的选择是: