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

时间:2024-04-06 18:33:54

http://my.oschina.net/sub/blog/184074

今天碰到一个怪问题:

原本跑的好好的代码,打成 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包中的资源和目录的解决方法

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

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

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

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

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

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