在我的一个库(比如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中类加载的方式不同吗?
发布于 2011-06-13 06:57:18
简单地说,做您想做的事情是不安全的,因为它不能保证您试图定位的jar文件甚至存在。如果罐子已经膨胀了呢?如果应用服务器使用其他形式的存储(即数据库中的存储)怎么办?jar的位置是一个不应该对应用程序很重要的实现细节。
尽管如此,如果您必须这样做(表示设计错误),您将不得不在每个目标平台上尝试它,并编写特定于平台的代码,每次升级到最新版本时,您都必须重新检查这些代码。
https://stackoverflow.com/questions/6328944
复制相似问题