【发布时间】:2011-12-29 06:52:30
【问题描述】:
.. 我有一个应用程序(一个 .war),它有一个插件系统,其中每个可插入插件都是一个 .jar 及其 .jar 依赖项。 在 webapp 中,通过一个管理 web 界面,插件是通过使用 ClassLoader 加载的,ClassLoader “加载” .jar 及其依赖项。 但问题是,例如,2 个插件 A 和 B 可能有一个或多个公共依赖项(commons-io.jar、commons-collection.jar、...)......所以通常我不应该加载更多次.jar 已经被另一个插件加载,或者已经存在于 webapp 本身 -> WEB-INF/lib/ 所以,我想知道是否有办法不再次加载已经通过 webapp 或其他插件加载的 .jar 如果可能的话,我该怎么做!
实际上,无论有什么可用的解决方案,我只是想避免类加载器问题。
注意:每个插件都是一个 .zip 文件,其中包含以下架构
插件名称/
- code/
- A.class
- B.class
- ...
- lib/
- commons-io.jar
- log4j.jar
- ....
- description.xml
- version.txt
code/目录下的每个.class文件都被classloader加载,插件的lib/目录下的每个.jar也被加载。
但通常情况下,我不应该重新加载 .jar “commons-io.jar”中存在的类,如果它已经存在的话......
我希望我已经足够清楚了,提前感谢您的关注和帮助。
【问题讨论】:
-
两个插件是否可能需要相同依赖项的不同版本?或者这不是问题?
-
是的,有可能 2 个插件具有相同依赖项的不同版本
标签: java web-applications plugins jar classloader