【问题标题】:How to verify that a .jar or a class has been already loaded by the ClassLoader in Java如何验证 .jar 或类是否已由 Java 中的 ClassLoader 加载
【发布时间】: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


【解决方案1】:

要跟踪 JVM 加载了哪些类,您可以添加

-verbose:class 
Display information about each class loaded.

在启动 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]

【讨论】:

    【解决方案2】:

    如果您使用-verbose:class JVM 选项,与 Sun Microsystems 兼容的 JVM 也会在加载类时显示它们。但是,您无法以编程方式访问此信息。

    【讨论】:

      【解决方案3】:

      如果我理解正确,您想知道是否已加载 Java 文件或 jar,如果没有加载,那么您想加载它吗?我得到的一种解决方案是,您可以检查类路径是否存在 jar。

      【讨论】:

        猜你喜欢
        • 2014-08-23
        • 2018-07-05
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多