pai*_*sad 4 java plugins web-applications jar classloader
..我有一个应用程序(.war),它有一个插件系统,其中每个可插入插件都是一个带有.jar依赖项的.jar.在webapp中,通过管理Web界面,使用ClassLoader加载插件,该类"加载".jar及其依赖项.但问题是,例如,2个插件A和B可能有一个或多个公共依赖项(commons-io.jar,commons-collection.jar,...)...所以通常我不应该加载更多一次.jar已经被另一个插件加载,或者已经存在于webapp本身 - > WEB-INF/lib /所以,我想知道是否有一种方法可以不加载另一个时间.jar已经存在了通过webapp或其他插件加载如果可能,我该怎么做!
实际上,无论可用的解决方案是什么,我只想避免类加载器问题.
注意:每个插件都是一个.zip文件,其中包含以下体系结构
插件名称/
- code/
- A.class
- B.class
- ...
- lib/
- commons-io.jar
- log4j.jar
- ....
- description.xml
- version.txt
Run Code Online (Sandbox Code Playgroud)
目录代码中的每个.class文件都由类加载器加载,插件的lib /目录中的每个.jar也被加载.
但通常,我不应该重新加载.jar"commons-io.jar"中存在的类,如果它已经存在的话......
我希望我已经足够清楚了,先谢谢你的关注和帮助.
要跟踪您可以添加的JVM加载的类
-verbose:class
Display information about each class loaded.
Run Code Online (Sandbox Code Playgroud)
在启动JVM之前的选项.
它会产生类似的输出
[Opened C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded java.lang.Object from C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded java.io.Serializable from C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded java.lang.Comparable from C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded java.lang.CharSequence from C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded java.lang.String from C:\Program Files\Java\jre6\lib\rt.jar]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |