You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weblogic 12c部署升级Jersey 2.5.1的Web应用遇库引用异常求助

解决Weblogic 12c部署Jersey 2.5.1应用时的Unresolved Webapp Library引用问题

从你提供的报错信息来看,核心问题是Weblogic无法找到匹配的JAX-RS 2.0库引用,导致部署失败:

return (<Dec 9, 2019 7:35:17,517 AM GMT> <Error> <Deployer> <WL-149205> <Failed to initialize the application "CDMWebWar" due to error weblogic.application.ModuleException: Error: Unresolved Webapp Library references for "WebAppModule(CDMWebWar:CDMWeb.war)", defined in weblogic.xml [Extension-Name: jax-rs, Specification-Version: 2, exact-match: false]>
)

这是因为Weblogic 12c默认自带了JAX-RS 1.x的实现(基于Jersey 1.x),而你的应用升级到了Jersey 2.5.1(对应JAX-RS 2.0规范),两者版本不兼容,导致Weblogic试图加载自带的旧版本库,却找不到符合JAX-RS 2.0规范的库。下面是几个亲测有效的解决方法:

方法1:禁用Weblogic自带的JAX-RS库,优先加载应用内的包

在你的weblogic.xml中添加prefer-application-packages配置,告诉Weblogic优先使用应用打包的Jersey相关类,而不是服务器自带的:

<weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">

    <!-- 保留你原有的其他配置,比如context-root等 -->

    <wls:prefer-application-packages>
        <!-- JAX-RS API包 -->
        <wls:package-name>javax.ws.rs.*</wls:package-name>
        <!-- Jersey 2.x核心包 -->
        <wls:package-name>org.glassfish.jersey.*</wls:package-name>
        <!-- Jersey依赖的HK2容器包 -->
        <wls:package-name>org.glassfish.hk2.*</wls:package-name>
        <wls:package-name>org.jvnet.hk2.*</wls:package-name>
        <!-- Jersey媒体相关包 -->
        <wls:package-name>org.glassfish.jersey.media.*</wls:package-name>
        <!-- 兼容可能存在的旧Jersey包(如果有的话) -->
        <wls:package-name>com.sun.jersey.*</wls:package-name>
        <wls:package-name>jersey.repackaged.*</wls:package-name>
    </wls:prefer-application-packages>
</weblogic-web-app>

方法2:移除或调整weblogic.xml中的JAX-RS库引用

如果你的weblogic.xml里配置了如下的库引用:

<library-ref>
    <extension-name>jax-rs</extension-name>
    <specification-version>2</specification-version>
    <exact-match>false</exact-match>
</library-ref>

要么直接删除这段配置(让应用使用自身打包的Jersey库),要么确保Weblogic服务器上已经部署了符合JAX-RS 2.0规范的库(比如Oracle提供的JAX-RS 2.0扩展库,但这个需要单独下载部署,不如直接用应用自带的方便)。

方法3:确认应用依赖配置正确(Maven/Gradle)

如果用Maven管理依赖,确保Jersey相关依赖是compile范围(默认就是),这样会把依赖打包到WAR的WEB-INF/lib目录下:

<dependencies>
    <!-- Jersey核心Servlet容器依赖 -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.5.1</version>
    </dependency>
    <!-- 如果你用了Jersey的其他模块,比如JSON支持,也要加上 -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.5.1</version>
    </dependency>
</dependencies>

注意不要把Jersey依赖设为provided,否则不会打包到WAR里,Weblogic还是会找自带的旧版本。

方法4:清理Weblogic缓存并重启服务器

有时候Weblogic的临时缓存会导致旧的库文件残留,清理后重启能解决奇怪的问题:

  • 停止Weblogic服务器
  • 删除域目录下的tmp和cache文件夹(比如your_domain/tmp、your_domain/cache)
  • 重新启动服务器,再部署应用

额外注意点

  • Weblogic 12.1.3及以上版本开始原生支持JAX-RS 2.0,但即使如此,还是建议配置prefer-application-packages来避免版本冲突
  • 检查WAR包的WEB-INF/lib目录,确保所有Jersey 2.5.1相关的jar包都存在,没有遗漏

内容的提问来源于stack exchange,提问作者Krish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:03:58