MyClass.class.getResource(“MyClass.class”)。getPath()在JBoss 4.2.3和JBoss 5.1.0中返回不同的路径

时间:2011-06-13 09:56:31

标签: java jboss

在我的一个库(比如 abc.jar )中,我有一个MyClass.class类。由于我需要在运行时了解 abc.jar 文件所在的目录,因此使用了以下逻辑。

String classPath = MyClass.class.getResource("MyClass.class").getPath();

在JBoss 4.2.3中,这将导致classPath等于:

file:/D:/app-servers/jboss-4.2.3.GA/server/uat012/deploy/MyApp.war/WEB-
INF/lib/abc.jar!/com/foo/bar/MyClass.class

然而在JBoss 5.1.0中,classPath以

的形式返回
/D:/app-servers/jboss-5.1.0.GA/server/uat012/deploy/MyApp.war/WEB-
INF/lib/abc.jar/com/foo/bar/MyClass.class

不同之处在于它不是以'file'和'!'开头的。在jar中分割jar位置和类位置的字符也丢失了。

那么,是因为JBoss 5.1.0中类加载的方式不同吗?

从独立于Web / app服务器和普通JVM 的给定类文件中识别jar位置的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

简短的回答是,做你想做的事情是不安全的,因为它不能保证你试图找到的jar文件甚至存在。如果罐子已经膨胀怎么办?如果应用服务器使用其他形式的存储(即在数据库中),该怎么办? jar的位置是一个实现细节,对应用程序来说并不重要。

那就是说,如果你必须这样做(表明设计不好),你必须在每个目标平台上尝试并编写特定于平台的代码,每次升级到最新版本时都需要重新访问版本