请教一下,我有一个jar文件(我把用到的jar包A打包进去了),我想直接运行它 。但是出现错误。
用java -jar myjar.jar 出现没有找到包A。我把jarA解压以后,再打包进去,就可以运行了。但是这个不是我想要的。
到网上找到了将jar包拷贝到jre\lib\ext下,这样,我不用将jar包A打包到我要运行的包中,也不需要解压以后再打包进去,我双击就可以运行了。但是这样也很不好,如果我有很多jar包的话,就都要把这些jar包放到jre\lib\ext下,这样很不方便,有没有办法可以使得我的jar包(里面包含其他用到的jar包),双击可以直接运行的方法啊。实在不行,我想如果可以把这些用到的jar包放在我自己的一个相对目录下面,然后设置classpath实现,这样就可以不用拷贝这么麻烦了。但是我这样尝试了,也不行。目前只能把用到的jar包拷贝到jre\lib\ext,才可以运行。
那位大虾可以帮忙看看哦不胜感激。

解决方案 »

  1.   

    没有人回答我来回答吧,呵呵在myjar.jar的META-INF/MANIFEST.MF里面加上Class-Path: 相对路径/A.jar这样就可以了
      

  2.   

    没明白LZ什么意思
    用ECLIPSE直接打包不就行了
      

  3.   

    前者是jvm的扩展类库 指定好JAVA_HOME后默认优先于ClassPath加载
      

  4.   

    你看看我之前在这里写的Java杂谈的第一篇里面已经详细解释过各个级别的ClassLoader了,
    其中第二级别扩展级别的ClassLoader就对应jre/lib/ext目录至于你希望在jar包中引入别的jar,当然需要设置classpath。2楼的方法应该是可行的“在myjar.jar的META-INF/MANIFEST.MF里面加上Class-Path: 相对路径/A.jar"只是你不确定到底问题出在哪里的时候教你可以在程序中加这么一句来查看当前程序的classpath到底包括那些:System.out.println(System.getProperty("java.class.path"));其实System有很多这样的Property,包括操作系统和JVM的参数都能看到,对调适程序很有帮助的
      

  5.   

    使用 java 命令运行 .jar 文件(即带有 -jar 参数)时,
    类加载器会忽略 -classpath 所指定的类库,需要在 MANIFEST.MF 文件中指定,
    或将类库拷贝至 ext 目录下(这个目录下类加载高于 classpath),但是不推荐
    把类库放在这个目录下。建议放在 MANIFEST.MF 文件中,指定 Class-Path: 属性,比如:Main-Class: test.Main
    Class-Path: lib/abc.jar lib/123.jar注意:上面的冒号后有一个空格,并且在文件结束处最少有两个空行(MANIFEST.MF 规范极其严格)将这个 MANIFEST.MF 打包至 jar 文件的 META-INF 下,比如取名为:my.jar在 my.jar 的同一路径下建一个 lib 目录(即 Class-Path 中的名字),把那两个 jar 拷贝进去
    再退至 my.jar 目录,使用 java -jar my.jar 就可以运行了。
      

  6.   

    可不可以就一个文件,就可以运行阿,把要用的东西都打包到这个文件中.我试过了,如果把那些包都拿出来,放在和My.jar同一目录下,这样就可以,但是如果一起打包在一个jar包中就不可以!
      

  7.   

    二楼说的,我上次理解错了,是可以的。就是我想直接用一个jar包就执行,如果可以的话,就最好了,如果不行也没有关系。