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

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

 

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

你可能感兴趣的:(java,eclipse,C++,c,ext)