当前位置: 首页 > 知识库问答 >
问题:

Weblogic 10.3.5覆盖Spring版本

柳鸿博
2023-03-14

我正在使用Oracle的OEPE发行版开发一个Web应用程序,包括Weblogic服务器10.3.5。WLS包括它自己的Spring版本,似乎是2.5.6。SEC01。但是,我们正在尝试使用特定于3.1版本的Spring和Spring Security功能。

Maven POM将Spring版本定义为3.1.1.RELEASE属性(该属性插入到部分中,即:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>

我已经尝试了两种不同的方法来weblogic.xml排除内置的Spring(一种在下面评论,但请放心,我已经尝试了两种方法):

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>com.oracle.ojdbc16.*</wls:package-name>
        <wls:package-name>antlr.*</wls:package-name>
        <wls:package-name>javax.persistence.*</wls:package-name>
        <wls:package-name>org.apache.commons.*</wls:package-name>
        <wls:package-name>org.springframework.*</wls:package-name>
        <wls:package-name>org.hibernate.*</wls:package-name>
        <wls:package-name>org.apache.xerces.*</wls:package-name>
    </wls:prefer-application-packages>
    <!-- <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> -->
</wls:container-descriptor>

我到底要做什么才能使用我自己版本的Spring?

共有3个答案

公孙芷阳
2023-03-14

如果您使用的是Spring框架,那么很可能在WAR而不是EAR中部署SpringBean,即使是在Spring集成项目中。高达12c(包括12.2.1),没有任何特定配置,您最多只能使用Spring framework 3.0.5和Spring Integration 2.2.6。任何使用更高版本Spring的尝试都可能在部署时失败:

weblogic.application.ModuleException: java.lang.NoSuchMethodError: org.springframework.core.MethodParameter.getNestedParameterType()Ljava/lang/Class;

因为Oracle JRF嵌入式Spring框架是由类加载器选择的。

在多服务器域中,不将JRF部署到给定的服务器实例不会解决该问题,但没有JRF的整个域可以解决该问题。

取而代之的诀窍是在WEB-INF/weblogic.xml部署描述符中使用predive-web-inf-class参数,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<wls: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://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.8/weblogic-web-app.xsd">
    <wls:container-descriptor>
        <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
    </wls:container-descriptor>
</wls:weblogic-web-app>

您可以在带有JRF插装的WebLogic域中享受Spring Framework 4.2的好处。当然,不要忘记将Spring core 4.2和相关依赖项包含到WAR文件程序集中(即检查build.WAR以包含WEB-INF/lib/Spring*.jar)。

姜玉泽
2023-03-14

选项1:将Spring3.x应用程序部署到未安装JRF的域中的wls服务器。这对我来说很管用。

选项2:在weblogic中使用首选web inf类。xml并作为战争部署。在wls 10.3.6、JRF domain和Spring 3.2.2中,这对我来说是可行的。我不喜欢使用应用程序包,但更喜欢使用web inf类。

注意:在安装了JRF的域中,我尝试了war/weblogic.xml/prefer-application-packages和ears/weblogic-application.xml/prefer-application-packages方法,但似乎都无效。我有一个输出org.springframework.core.SpringVersion.getVersion()的测试jsp,它坚持报告2.5.6。尽管我努力了(这是捆绑在oracle_common/模块文件夹中的Spring版本)。

不过,在非JRF域和org.springframework.core.SpringVersion中部署相同的应用程序。getVersion()将报告您与应用程序捆绑的spring的任何版本。

鱼征
2023-03-14

我也有同样的问题。解决方案是创建weblogic应用程序。xml转换到EAR项目的META-INF文件夹中。这是代码。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
    <prefer-application-packages>
        <package-name>org.apache.*</package-name>
        <package-name>org.springframework.*</package-name>
    </prefer-application-packages>
</weblogic-application>

也许你的问题是你在使用weblogic。将xml转换为WAR项目,而不是weblogic应用程序。xml到EAR项目中。

希望有帮助。

 类似资料:
  • 问题内容: 我正在使用Oracle的OEPE发行版(包括Weblogic服务器10.3.5)开发Web应用程序。WLS包含自己的Spring版本,该版本似乎是2.5.6.SEC01。但是,我们正在尝试使用3.1发行版的Spring和Spring Security功能。 Maven POM将Spring Version定义为属性3.1.1.RELEASE(该属性已插入各节中,即: 我在weblogi

  • 我有多个spring项目,它们都具有相同的自定义父POM,它们都继承了它们的spring-boot版本(1.5.18.release)。只有一个子项目需要更新到版本2.1.4.release,但是当我导入spring-boot-dependencies时,子项目中的spring-boot dependencies仍然保持在版本1.5.18.release。 自定义父POM:

  • 我的意图是在spring boot应用程序中有两个概要文件—开发和生产概要文件。开发概要文件只是为了覆盖生产概要文件的一些变量(比如内存中的数据库,而不是云中的数据库)。由于我预计将来会对生产概要进行一些更改,所以在开发概要中复制变量似乎不是一个解决方案。 因此,在Spring参考中,我读到应该只从引用的配置文件中添加属性。 有时,将特定于概要文件的属性添加到活动概要文件中而不是替换它们是很有用的

  • 我试图获得基于gradle的android项目的覆盖面。 所以我为我的应用程序添加版本。gradle 和 内部调试。 这工作正常。我可以获取使用或的报告。 问题是调试版本通常被开发人员用来运行和测试应用程序。因此,在构建中启用代码覆盖可能会降低构建的速度,这种用法可能不需要。 所以我想我会添加新的配置 不幸的是,没有和不运行覆盖类型。 当我使用dex2jar反编译apk并使用jd-gui查看内部时

  • 对于Spring Boot2.1,默认情况下禁用bean重写,这是一件好事。 然而,我确实有一些测试,其中我使用mockito用模拟实例替换bean。在默认设置下,使用这种配置的测试将由于bean重写而失败。 我发现唯一有效的方法是通过应用程序属性启用bean重写: 但是,我真的希望确保测试配置的bean定义设置最小,这一点将由spring在禁用重写的情况下指出。 我正在重写的bean是 在导入到

  • 我的父模块中的Spring Boot版本是v2.1.17。发布 然后我在子模块中引入了spring boot starter安全性,指定的版本是2.4.4,它覆盖了父模块中的版本(v2.1.17版本)。 然后,我运行了命令,发现子模块中spring-boot-starter-security的版本确实是2.4.4,但spring-boot-starter-security中引用的artifactI