EAR 的 APP-INF/lib 内 JAR 加载顺序
题
在 EAR 内的 META-INF 目录中添加具有 Class-Path 属性的 MANIFEST.MF 文件是否会影响位于 WebLogic 8.1 下 APP-INF/lib 中的 JAR 的加载顺序?
解决方案
我不相信您可以通过 MANIFEST.MF 的 ClassPath 属性控制 APP-INF/lib 顺序。
根据客户的不同,我采用了几种不同的方法。
- 将补丁 jar 添加到 WLS 的系统类路径中。如果您检查domain/bin/setDomainEnv.sh(或.cmd),应该有pre、post、patch 类路径环境变量。您可以尝试将补丁 jar 添加到此处的类路径中。这使得它可用于所有应用程序,但这可能不是您的客户想要的。
- 修补 somejar.jar 并将其命名为 somejar-patched.jar。将 APP-INF/lib 中的 jar 替换为“-patched”版本。
其他提示
我认为类加载器会读取应用程序所需的 JAR。
我有两个问题要问你:
- 为什么还在使用 WebLogic 8.1?现已停止支持,当前版本为 10.x。你落后了两个版本。这是尚未迁移的旧应用程序吗?通过升级您将得到很大的提升,因为您将使用带有 -server 选项的 JDK 5 或 6。我会推荐它。
- 为什么要关心加载顺序?容器如何加载和管理 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>
不隶属于 StackOverflow