Weblogic 12c: Jersey 的 prefer-web-inf-classes 和 prefer-application-packages

9
我必须在Weblogic 12c Server (12.2.1)上同时使用weblogic.xml的prefer-web-inf-classes和prefer-application-packages属性(奇怪的是...)。这是基于Jersey 1.9 (Jersey 1.x JAX-RS RI)和Guice的REST应用程序。
1.为什么要使用prefer-web-inf-classes
如果您有多个WAR文件,您必须将guice-jersey/guice库放置在war/lib级别,否则会出现Multibindings错误。还必须将prefer-web-inf-classes设置为true。只有这样才能正常工作!
我尝试过使用prefer-application-packages与包(com.sun.jersey.guice.spi.container.servlet、com.google.inject.servlet等),但无济于事。注意:无法在EAR级别排除这些库。
2.为什么要使用prefer-application-packages
为了在Weblogic 12c (12.2.1)上使用Jersey 1.x JAX-RS RI,我必须指定以下包(否则Weblogic将使用Jersey 2和不同版本的Jackson库等)。如果按照此方式指定,则可以在Jersey 1.X上完美运行。我分别测试了两个war,都可以正常工作...但是,请记住,我的朋友,我有两个war...
总结:我不能同时使用这两个属性(weblogic.xml)(部署时会出错),但需要:
1.为了解决Guice Filter问题,需要将prefer-web-inf-classes设置为true,以便在war-lib级别使用guice-servlet.jar/jersey-guice.jar。
2.为了使用Jersey 1.x,需要使用prefer-application-package。
问题:如何将它们结合起来使用其中之一?
2个回答

2

毕竟

  1. prefer-web-inf-classes设置为true
  2. 如果您使用此选项,则不需要使用prefer-application-packages....但确保您在war / ear级别拥有正确的库。

    问题是:

该项目与基于Swagger的Jersey 2(用于 Jersey 2.X ...)存在依赖关系。因此,通过Swagger依赖项(swagger-jersey2-jaxrs),Jersey 2库被打包到了 ear / war... 因此,prefer-web-inf-classes无效!

移除该依赖后,所有问题都得到解决!

在同一级别(类路径或ear lib、war lib)不应存在同一库的不同版本。


我想要我的赏金回来))!没有人回答))。 - Azimuts

0
  • 你好,世界!嗨,有两种方法可以解决这个问题。

    1. 您可以将两个文件组合成一个文件,并根据需要使用选择标签调用它。

    2. 您可以在其中一个文件中编写标记以合并或导入/包含您的XML文件。示例如下。 提示:请搜索如何基于条件合并和调用xml文件。


抱歉,但这没有意义...相同的weblogic.xml必须对两个目的都有效,即使用Jersey 1.X和Jersey-Guice。 - Azimuts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接