9

Weblogic 10.3.1.0 正在使用 com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar ...我想从我的代码中使用 commons-net-2.0.jar。

如何强制它仅在我的代码中使用较新的 JAR?

4

2 回答 2

20

我想从我的代码中使用 commons-net-2.0.jar。

WebLogic 使用父类加载器优先策略,您基本上有两个选项来调整此行为:

  • 在 Web 应用程序部署描述符中使用prefer-web-inf-classes元素weblogic.xml(位于 WEB-INF 旁边web.xml)~或~
  • 将您的战争内部人员打包为 EAR,并使用您在描述符中配置的WebLogic过滤类加载器weblogic-application.xml(位于 META-INF 旁边application.xml

这是一个示例 weblogic.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
 xmlns="http://www.bea.com/ns/weblogic/90"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic- web-app.xsd">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
     </container-descriptor>
</weblogic-web-app>

这是一个示例 weblogic-application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    <application-param>
        <param-name>webapp.encoding.default</param-name>
        <param-value>UTF-8</param-value>
    </application-param>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
    </prefer-application-packages>
</weblogic-application>

前一个选项更简单,但对 webapp 来说是全局的。如果您当前没有使用 EAR 包装,则后者会引入更多复杂性,但可以提供更好的控制。

也可以看看

于 2010-07-31T00:12:06.963 回答
1

您是否尝试将所需的 JAR 放在 WAR 的 \WEB-INF\lib、EAR 的 \APP-INF\lib 或 EAR 文件的 \lib 目录中?

如果您的项目是一个独立的 Web 项目(没有 EJB),则将 JAR 放在 WEB-INF\lib 中就足够了。对于可能将 EJB 模块和 Web 模块捆绑在 EAR 文件中的企业应用程序,APP-INF\lib 应该可以工作,尽管我不太确定 WebLogic Server 对库目录(通常是 EAR 文件中的 \lib 目录)的支持,但有时可通过 application.xml 配置)概念在 Java EE 5 中提出。

编辑:在应用程序服务器的库在应用程序中存在的库之前加载的情况下,WebLogic Server 的过滤类加载器功能将有助于确保应用程序始终从其类路径而不是服务器的类路径加载正确的类。

于 2010-07-30T23:33:50.900 回答