Java 解析外部依赖的类路径
我有一个外部库(只有一个名为org.vinay.dep.DependedClass的类文件) 其包目录结构和目录组织位于桌面上 我有一个名为a.jar的jar,它依赖于我的外部库 执行Java 解析外部依赖的类路径,java,jar,classpath,manifest,noclassdeffounderror,Java,Jar,Classpath,Manifest,Noclassdeffounderror,我有一个外部库(只有一个名为org.vinay.dep.DependedClass的类文件) 其包目录结构和目录组织位于桌面上 我有一个名为a.jar的jar,它依赖于我的外部库 执行jar-tf a.jar将给出以下输出 META-INF/ META-INF/MANIFEST.MF com/ com/os/ com/os/hw/ com/os/hw/HelloWorld.class co
jar-tf a.jar
将给出以下输出
META-INF/
META-INF/MANIFEST.MF
com/
com/os/
com/os/hw/
com/os/hw/HelloWorld.class
com/os/hw/HwUtil.class
我试着用两种方式运行这个罐子
java-classpath C:/Users/vinay/Desktop-jar a.jar
with
正在创建manifest.mf条目
清单版本:1.0创建人:1.6.0_05(Sun 微系统公司)
主类:com.os.hw.HelloWorld 对于DependedClass
java-jar a.jar
如下更改清单条目后
清单版本:1.0创建人:1.6.0_05(Sun 微系统公司)
主类:com.os.hw.HelloWorld
类路径:C:/Users/vinay/Desktop 但这一次,它为HelloWorld抛出了NoClassDefFoundError 阶级本身
当我将外部库打包到jar中,并在清单文件中使用jar名称作为类路径条目时,它可以工作。有没有一种方法可以在不将外部库打包到jar中的情况下解决这个问题?我认为不能将-classpath和-jar组合起来。您可以这样做:
java -cp C:/Users/vinay/Desktop;a.jar com.os.hw.HelloWorld
这假设a.jar在当前文件夹中(或者您也可以将完整路径添加到a.jar)
将清单中的类路径条目硬编码到本地计算机上的路径永远都不是正确的解决方案:)是的,它可以工作。谢谢。但我们不能期望用户知道主类是什么?有没有办法解决jar对未归档的外部类文件的依赖性?是的,您可以通过自定义类加载器加载更多类,例如创建一个URLClassLoader,将jar加载到相对于当前文件夹的文件夹中。更好的方法可能是为应用程序附带一个windows批处理脚本和一个*nix shell脚本,用于设置类路径并正确调用main方法。