【问题标题】:How to set the orders of jars in Weblogic EAR?如何在 Weblogic EAR 中设置 jar 的顺序?
【发布时间】:2014-12-31 13:38:11
【问题描述】:

我有一个 EAR 文件,其中包含两个不同的 jar,它们共享一些具有相同包 + 类名的类。这导致在 EAR 文件本身内部加载类的重要性。

如何告诉 Weblogic 先从 APP-INF/lib 加载一个 jar,然后再在同一个 APP-INF/lib 中加载不同的 jar?我需要定义一个特定的顺序,如果发生冲突,它将从 JAR a 而不是 JAR b 中获取。

我正在使用 Webogic 11g (10.3)。

谢谢。

【问题讨论】:

    标签: weblogic classloader


    【解决方案1】:

    weblogic-application.xml 中的顶级元素有一个您可能想要查看的可选类加载器结构元素。例如,您可以执行以下操作:

       <classloader-structure> 
         <module-ref> 
           <module-uri>ejb1.jar</module-uri> 
         </module-ref>
         <module-ref> 
           <module-uri>web3.war</module-uri> 
         </module-ref>
    
         <classloader-structure> 
            <module-ref> 
               <module-uri>web1.war</module-uri> 
            </module-ref> 
         </classloader-structure>
    
       </classloader-structure>
    

    Oracle docs 上阅读有关声明自定义类加载的更多信息。您还可以在同一个感兴趣的链接中找到 Classloader Analysis Tool (CAT)。

    【讨论】:

    • 感谢您提供的信息。问题是 - 我已经知道这个选项,但问题是我的 jar 不是模块。不是 EJB jar 或 WAR。只是标准的支持 LIB 罐子。这些不能在 xml 中定义。
    • @user3447647 您好,我遇到了类似的问题,您有解决这个问题的方法吗?
    • 面临完全相同的问题,将我的库打包到 shared-lib.jar 中,将 lal jar 放入 app-inf/lib 文件夹但没有骰子,继续获取应该可见的类的 classnotfoundexception 并拾取共享库通过 weblogic 和使用它们的组件
    • @Kin - 听起来你可能需要 或者你可以简单地将罐子添加到你的 $DOMAIN/lib 文件夹中,看看会发生什么。请参阅:docs.oracle.com/cd/E21764_01/web.1111/e13706/…。如果这没有帮助,请随时使用您的具体详细信息添加一个新问题
    • 不,这不是我需要的,问题出在类加载器级别,这个功能没有经过深思熟虑,因此缺乏深入的文档,它没有考虑类加载的所有细微差别,因为应用程序 ear 文件中的示例 APP-INF/lib 的加载方式与共享库不同,这只是对未来 seakers 的提示:如果您不断收到 classnotfound 异常,则您的应用程序没有正确加载类(您的应用程序看不到它们)在这里阅读想一想,你应该弄清楚docs.oracle.com/cd/E11035_01/wls100/programming/…
    【解决方案2】:

    如果您遇到 ClassNotFound 异常,请尝试检查每个模块的 MANIFEST.MF,以查看“Class-Path”属性是否正确填充了 APP-INF/lib 中 jar 的位置 -我刚刚花了一个星期或更长时间试图找到解决类似问题的方法,这就是解决问题的方法。

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 2015-10-13
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2023-04-03
      • 2011-05-11
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多