jre\lib\ext 和 classpath的区别

sunblack_2003 2008-03-27 12:50:33
请教一下,我有一个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,才可以运行。
那位大虾可以帮忙看看哦。。。不胜感激。
...全文
413 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunblack_2003 的回复:]
可不可以就一个文件,就可以运行阿,把要用的东西都打包到这个文件中.我试过了,如果把那些包都拿出来,放在和My.jar同一目录下,这样就可以,但是如果一起打包在一个jar包中就不可以!
[/Quote]

不可以
Cspider588 2008-03-31
  • 打赏
  • 举报
回复
晕,还没有解决么。。。。。
sunblack_2003 2008-03-31
  • 打赏
  • 举报
回复
二楼说的,我上次理解错了,是可以的。就是我想直接用一个jar包就执行,如果可以的话,就最好了,如果不行也没有关系。
sunblack_2003 2008-03-30
  • 打赏
  • 举报
回复
可不可以就一个文件,就可以运行阿,把要用的东西都打包到这个文件中.我试过了,如果把那些包都拿出来,放在和My.jar同一目录下,这样就可以,但是如果一起打包在一个jar包中就不可以!
Ant 2008-03-30
  • 打赏
  • 举报
回复
你看看我之前在这里写的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的参数都能看到,对调适程序很有帮助的


  • 打赏
  • 举报
回复
使用 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 就可以运行了。

sunblack_2003 2008-03-29
  • 打赏
  • 举报
回复
二楼的我试过了,好像还是不能用阿,大家发方便的,能发一个邮箱不,我把我打包好的东西发给你们,你们帮我看一下,如何,谢谢了
dracularking 2008-03-27
  • 打赏
  • 举报
回复
前者是jvm的扩展类库 指定好JAVA_HOME后默认优先于ClassPath加载
胡矣 2008-03-27
  • 打赏
  • 举报
回复
没明白LZ什么意思
用ECLIPSE直接打包不就行了
thursdaynight 2008-03-27
  • 打赏
  • 举报
回复
没搞清楼主在说什么啊。
Cspider588 2008-03-27
  • 打赏
  • 举报
回复
没有人回答我来回答吧,呵呵

在myjar.jar的META-INF/MANIFEST.MF里面加上Class-Path: 相对路径/A.jar

这样就可以了
yinlei_1 2008-03-27
  • 打赏
  • 举报
回复
关注!
以前没考虑过这个问题,期待结果!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧