繁体   English   中英

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

[英]Weblogic 12c : Prefer-web-inf-classes and prefer-application-packages for Jersey

我必须使用两个(奇怪的是..) prefer-web-inf-classesprefer-application-packages的weblogic.xml的特性在WebLogic 12c的服务器(12.2.1)

它是基于 Jersey 1.9 的 REST 应用程序。 ( Jersey 1.x JAX-RS RI) 和 Guice。

1. 为什么使用 :prefer-web-inf-classes

如果您有多个 WAR,则必须将 guice-jersey / guice 的库置于 war/lib 级别,否则您会得到Multibindings Error

还必须指出比true prefer-web-inf-classes

这样它就可以正常工作了!

我尝试使用带有包( com.sun.jersey.guice.spi.container.servletcom.google.inject.servlet等...)的prefer-application-package s以相同的方式工作,但没有办法。

注意:无法在EAR级别排除此库。

2. 为什么使用 :prefer-application-packages

要在 Weblogic 12c (12.2.1) 上使用 Jersey 1.x JAX-RS RI,所以我必须指明以下包( Weblogic 使用 Jersey 2 的其他方式,以及不同版本的 Jackson 库等

如果以这种方式表示,它可以在 Jersey 1.X 上完美运行 . 我分别探讨了两场战争,并且工作正常......但是,请记住我的朋友我有两场战争......所以......

总结

我不能同时使用这两个属性(在 weblogic.xml 上使用这两个属性时出现部署错误..),但它是必需的:

  1. 对于 Guice Filter 的问题,需要将prefer-web-inf-classestrue才能在war-lib 级别使用guice-servlet.jar / jersey-guice.jar
  2. 要使用 Jersey 1.x,需要使用 ..... prefer-application-package

问题:如何将两者结合使用其中之一?

毕竟

  1. 只使用prefer-web-inf-classestrue
  2. 如果你使用它,你不需要使用prefer-application-packages ....但要确保你在war /ear级别拥有正确的库。

    问题是:

该项目依赖 Jersey 2(基于Swagger for Jersey 2.X ...)所以通过 Swagger 依赖项( swagger-jersey2-jaxrs ),Jersey 2 库被打包在 ear/war 上...所以prefer-web-inf-classes没有效果!

删除依赖后,一切都解决了!

在同一级别(类路径或耳库或战争库)不应存在同一库的不同版本。

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

    1. 您可以将两个文件合并为一个文件,并根据选择标签作为要求调用它。

    2. 您可以只编写标签来合并或导入/包含您的 xml 文件。 示例显示。 提示:谷歌如何根据条件合并和调用xml文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM