类装入器问题 - 如何确定装入了哪些库版本(jar 文件)

2022-09-01 16:01:08

我刚刚解决了另一个*I-虽然-我-正在使用-这个版本的库-但显然-我的-应用程序-服务器-已经加载-一个旧版本的这个库-*问题(叹息)。

有没有人知道一个好方法来验证(或监视)您的应用程序是否有权访问所有适当的jar文件或加载的类版本?

提前致谢!

[附言在我看来,这是开始使用OSGi模块架构的一个很好的理由!

更新这篇文章也有帮助!它让我了解了JBoss的类加载器通过将其写入日志文件来加载的类。


答案 1

如果您碰巧使用 JBoss,则有一个 MBean(类装入器存储库 iirc),您可以在其中请求所有已装入某个类的类装入器。

如果所有其他方法都失败了,则始终会为正在加载的每个类文件打印jar的位置。java -verbose:class


答案 2

如果 jar 清单中有适当的版本信息,则有一些方法可以检索和测试版本。无需手动读取清单。

java.lang.Package.getImplementationVersion() 和 getSpecificationVersion() 和 isCompatibleWith() 听起来像是他们会做你想要做的事情。

你可以用 this.getClass().getPackage() 以及其他方式获取 Package。

javadoc for java.lang.Package 没有为这些属性提供特定的清单属性名称。快速的谷歌搜索在 http://java.sun.com/docs/books/tutorial/deployment/jar/packageman.html


推荐