运行一个可执行的Jar时,Classpath的设置无效问题,java的-cp和-jar参数不能

时间:2025-03-01 16:49:16

情况为:在cmd中,运行java -jar *.jar,出现classnotfound异常,jar中包含lib下面jar下面的class找不到,后来在中添加了Class-Path的配置,但是还是不行?

 

之一,将组件的Jar文件拷贝到公共JRE目录下的lib\ext下。比如,我的JDK1.5装在C: \Program Files\Java下,之下的j2re1.5.0是公共JRE,就将拷贝到: C:\Program Files\Java\j2re1.5.0\lib\ext 之下,这样在名令行下运行java -jar 就可以。 但这样,我们需要在JRE留下一大坨东西,看起来似乎不太好看。
之二,看Java文档说,manifest文件中还有个属性叫做Class-Path,在的manifest中加上一句: Class-Path: 重新打包。和在一个路径下,这样相对路径不变的话,会被ClassLoader照顾到。运行 java -jar 果然通过!这似乎还不错,我们可以把我们的软件做好,所有的功能分散在各个Jar文件中,但不能动任何一个Jar文件,相对路径一变,还是不行。而且,每 一个Jar文件之间要算好相对路径,每一个都要配置Class-Path,晕也晕死。
一个未完成的想法,看了看Eclipse的文件结构,有一个单独的launcher来启动整个Eclipse。launcher就是一个Jar文件,其中 的manifest并没有写Class-Path,它也能够调用plugins目录下的诸多组件来完成Eclipse的启动,运作。它是如何做的 呢?Launcher中似乎重写了Classloader,可惜弄不到它的源代码,秘密也许就在classloader中。