如何覆盖现有的Java库或指定要使用的确切版本

时间:2012-09-06 09:18:46

标签: java weblogic oracle-adf webcenter

我正在使用带有webcenter套件11.1.1.5的ADF Framework,它碰巧捆绑了Apache POI库版本3.5。 但是,当前项目至少需要3.7,甚至是该库的最新版本。

我有weblogic服务器,预部署的webcenter应用程序和所有必需的库。

如果我在我的项目中捆绑Apache POI库版本3.8,它会被部署,但是应用程序仍然使用版本3.5。

Webcenter库部署了earler,我无法改变这种行为。有没有办法至少为我的应用程序覆盖它,除了在我的项目中包含Apache POI的来源?

感谢。

3 个答案:

答案 0 :(得分:1)

我不确定它是如何进入weblogic但我可以建议你看一下类加载器配置。据我记得在部署Web应用程序时有一些类加载器命令配置。通常,您应该首先要求它使用应用程序级别类路径,然后使用应用程序服务器库类。打开weblogic管理控制台并尝试查找此配置。

答案 1 :(得分:1)

您可以尝试查看weblogic-application.xml文件(放入META-INF)。在此文件中,可以指定应从应用程序li​​b文件夹加载哪些类,而不是从weblogic加载。

示例:

<wls:prefer-application-packages> <wls:package-name>org.apache.log4j.*</wls:package-name> </wls:prefer-application-packages>

(这将从应用程序库加载log4j,而不是weblogic log4j库)

答案 2 :(得分:0)

AlexR以正确的方式指出,实际上有几种解决方案可以解决这个问题。 1.将POI库安装到$ DOMAIN_HOME / lib /中并重新启动服务器。这是系统类路径,如果未配置,则会覆盖其他源。 这个解决方案很简单,但并不适用于所有情况。 2.第二种解决方案是使用过滤类加载器功能,它将标准查找从system-&gt; application-&gt; web更改为filtering-&gt; application-&gt; web。 有关详细信息,请访问https://blogs.oracle.com/jamesbayer/entry/sharing_a_class_with_a

简而言之,您可以使用adminserver:port:/ wls-cat(类加载器分析工具)来识别可能的类冲突并检查当前的类加载器配置,然后使用收集的信息添加到应用程序中的weblogic-application.xml以启用过滤类加载器功能。例如,您可以向过滤器添加:“org.apache.poi。*”,使类加载器首先检查您的应用程序库。此配置仅影响当前应用程序,因此您不会破坏其他应用程序,这可能需要旧库的旧版本/不同版本。