添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
打篮球的匕首  ·  Get-Random ...·  1 年前    · 
酒量大的爆米花  ·  MSSQL执行大文件 - ...·  1 年前    · 

今天碰到一个怪问题:

原本跑的好好的代码,打成 jar 包就不能运行了。

问题出在,代码中有一段自动扫描 classpath 下面的指定 package 的 class

ClassLoader loader = Thread.currentThread().getContextClassLoader();
String packageDirName = packageName.replace('.', '/');
Enumeration<URL> dirs = loader.getResources(packageDirName);


竟然得到的 dirs 为空???

打包前直接在 classes 目录运行没问题,打成 jar 就出问题了。

经过研究发现,是 eclipse 打的 jar 包有问题。

原来在 eclipse 打 jar 包时未勾选 “Add directory entries”选项引起的。

勾上,打包,问题解决。

另外注意: jar包的文件名只能是英文,不能包含其他如“-”之类的符号。

通过 getResources 找不到jar包中的资源和目录的解决方法_eclipse

========================

附上一段别人发现的区别: http://kyfxbl.iteye.com/blog/1675368

用jar命令,比较了一下两种方法打出的jar包的区别,如图:


通过 getResources 找不到jar包中的资源和目录的解决方法_jar包_02


通过 getResources 找不到jar包中的资源和目录的解决方法_jar_03


可以看到,勾选了add directory entries之后打出的jar包,多了路径的信息,可能这就是区别