2011-06-13 66 views
0

不同的路径在我的图书馆之一(比如abc.jar),我有一个类MyClass.class。由于我需要在运行时了解哪个目录中存在abc.jar文件,因此使用了以下逻辑。MyClass.class.getResource( “MyClass.class”)。的getPath()返回到JBoss 4.2.3和JBoss 5.1.0

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,类路径返回

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

不同的是,它不是以'文件'和'!'开始的在罐子里拆分罐子位置和类位置的字符也是缺失的。

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

什么是从给定的类文件中识别jar的位置的最佳方式,而不依赖于web/app服务器和正常的JVM

回答

1

简短的回答是,做你想做的事是不安全的,因为不能保证你试图找到的jar文件存在。如果该罐子已经扩大会怎么样?如果应用服务器使用其他形式的存储(即在数据库中)会怎么样? jar的位置是一个对应用程序来说不应该很重要的实现细节。也就是说,如果你必须这样做(表明设计不好),你必须在每个目标平台上尝试它并编写特定于平台的代码,每次升级到最新版本。

+0

非常感谢Jim先生。我理解这一点,不幸的是,这是我遗留下来的一部分遗留代码,并且尽量不要改变太多。显然现在,这是需要重新写入一个标准的方式。 – ssethupathi 2011-06-13 15:27:27