首选包在prefer-application-packages中

时间:2014-12-17 22:27:16

标签: java classloader war

有没有办法强制在WAR中使用org.apache。*的WAR中的com.sun.jersey。*?或者这是根据订单自动完成的吗?

<prefer-application-packages>
    <package-name>com.sun.jersey.*</package-name>
    <package-name>org.apache.*</package-name>
    <package-name>antlr.*</package-name>
    <package-name>javax.ws.rs.*</package-name>
</prefer-application-packages>

1 个答案:

答案 0 :(得分:1)

这个问题并没有告诉我们你究竟想做什么。但是,我猜你正在尝试/希望让Weblogic在一个包树(泽西岛)中使用类作为另一个树(apache)中类的替换。

那不会奏效。假设您的源代码引用了org.apache.*类,则类加载器将查找具有源代码指定的完全限定类名的类。它不会在一个包树中对不同包树中的类进行动态替换。如果以反射方式加载类,则同样适用...除非您的应用程序本身重写限定类名称字符串。

prefer-application-packages元素正在解决另一个问题。它正在做的是在不同的地方寻找课程。 JAR文件可以在容器级别或Web应用程序中部署。默认情况下,如果您具有已在容器级别和Web应用程序级别JAR中部署的程序包,则将加载容器级别版本。此元素列出了应该加载webapp级别版本的包。


如果您尝试使用Jersey堆栈替换Apache堆栈,那么您(可能)需要以某种方式更改您的Web应用程序:

  • 在代码中替换显式使用类(正常和反射)。
  • 删除&#34; old&#34;的JAR。来自您的webapp的堆栈。

此外,尝试在Jersey容器中运行Apache特定代码会遇到麻烦。