在 EAR 内的 META-INF 目录中添加具有 Class-Path 属性的 MANIFEST.MF 文件是否会影响位于 WebLogic 8.1 下 APP-INF/lib 中的 JAR 的加载顺序?

有帮助吗?

解决方案

我不相信您可以通过 MANIFEST.MF 的 ClassPath 属性控制 APP-INF/lib 顺序。

根据客户的不同,我采用了几种不同的方法。

  1. 将补丁 jar 添加到 WLS 的系统类路径中。如果您检查domain/bin/setDomainEnv.sh(或.cmd),应该有pre、post、patch 类路径环境变量。您可以尝试将补丁 jar 添加到此处的类路径中。这使得它可用于所有应用程序,但这可能不是您的客户想要的。
  2. 修补 somejar.jar 并将其命名为 somejar-patched.jar。将 APP-INF/lib 中的 jar 替换为“-patched”版本。

其他提示

我认为类加载器会读取应用程序所需的 JAR。

我有两个问题要问你:

  1. 为什么还在使用 WebLogic 8.1?现已停止支持,当前版本为 10.x。你落后了两个版本。这是尚未迁移的旧应用程序吗?通过升级您将得到很大的提升,因为您将使用带有 -server 选项的 JDK 5 或 6。我会推荐它。
  2. 为什么要关心加载顺序?容器如何加载和管理 bean 对于您的应用程序来说应该无关紧要。

更新:

这听起来不同,几乎就像您与服务器 JAR 发生冲突一样。有那个 首选 web-inf-类 针对这种情况进行设置。你是这个意思吗?

我同意 duffymo

你不应该担心类加载的顺序,如果这是由于相互冲突的类可以随时从使用Maven或类似的工具瓶排除冲突的类。

有关实例,这是添加的球衣-spring4罐的一个非常简单的例子,但我不包括它的依赖性,所以我可以使用不同版本的弹簧框架库。

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring4</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>spring-web</artifactId>
      <groupId>org.springframework</groupId>
    </exclusion>
    <exclusion>
      <artifactId>spring-aop</artifactId>
      <groupId>org.springframework</groupId>
    </exclusion>
    <exclusion>
      <artifactId>spring-context</artifactId>
      <groupId>org.springframework</groupId>
    </exclusion>
    <exclusion>
      <artifactId>spring-beans</artifactId>
      <groupId>org.springframework</groupId>
    </exclusion>
  </exclusions>
</dependency>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top