有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

web应用程序如何验证。jar或类已经由Java中的类加载器加载

。。我有一个应用程序(a.war),它有一个插件系统,每个插件都是一个插件。用它的瓶子装瓶子。jar依赖项。 在webapp中,通过一个管理web界面,使用类加载器“加载”插件。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/中的类文件由类加载器加载。插件的lib/目录中的jar也被加载

但通常情况下,我不应该重新加载中的类。jar“commons io.jar”如果它已经存在的话

我希望我已经足够清楚了,提前感谢你的关注和帮助


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

  3. # 3 楼答案

    要跟踪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]