最近做作业的时候碰见了这样的问题,就是我的一个工程引用了第三方的组件,那些组件都是以jar的形式发布.做好后我把我的工程整个打成了可执行的jar包,当然没有包含第三方的组件.然而当我执行我的jar包时,却发现找不到第三方的组件,或者说它找不到第三方组件所在的jar包,即使设置了classpath也是无效.举个例子:那个第三方的组件类叫做b,在b包中,代码如下:
public class b{ public void show() { system.out.println("this is class b in package b."); }} 【程序编程相关:Lucene基础排序算法改进】
package b; 【推荐阅读:JDBC中ResultSet的修改】
public class a{ public static void main(string[] args) { b objectb = new b(); objectb.show(); }} 【扩展信息:java 构造函数的执行过程】
调用它的,我的作业的执行类叫做a,代码如下:
import b.b;
编译都正常,路径结构就是这样:a.classb/b.class在命令提示符下执行java a就出现了结果“this is class b in package b.”,一切正常.我将包b打包:jar cvf b.jar b生成了b.jar,与a.class在同一目录下,在命令提示符下执行:java -cp .;b.jar a也通过,出现了结果.但我要是将a也打包,当然要写好manifest,执行:jar cvfm a.jar manifest a.class生成a.jar,这个时候,执行就都通不过:java -cp .;b.jar -jar a.jar甚至,b类不需要被打包,这个时候cp即使指定为目录,目录下是普通的class文件也不行,换句话说,当执行jar文件时,java后面带的classpath就会无效,就好像,java的cp参数与jar参数不能共存一样.解决的方案,最简单的方法就是将b包也打进a.jar中:jar cvfm a.jar manifest .以上的事实在jdk 1.5下测试得到.
import b.b;
... 下一页