gpt4 book ai didi

java - 升级到 TomEE 1.7.1 后的类加载问题

转载 作者:行者123 更新时间:2023-11-28 22:54:48 25 4
gpt4 key购买 nike

我正在将应用程序从 TomEE 1.6.0 升级到 TomEE 1.7.1,发现一些类加载不一致。我遇到问题的类是 javax.ws.rs.core.Response,它存在于 jsr311-api 和 javaee-api 中。为了解决问题,我在两个不同的 vagrant 实例上部署了相同的应用程序并执行了以下操作:

# on TomEE 1.6.0 
find /opt -name "*.jar" | xargs grep javax.ws.rs.core.Response.class
Binary file /opt/cc/tomee/mlsvc/webapps/ROOT/WEB-INF/lib/jsr311-api-1.1.1.jar matches
Binary file /opt/apache-tomee-webprofile-1.6.0/lib/javaee-api-6.0-5-tomcat.jar matches

#on TomEE 1.7.1
find /opt -name "*.jar" | xargs grep javax.ws.rs.core.Response.class
Binary file /opt/cc/tomee/mlsvc/webapps/ROOT/WEB-INF/lib/jsr311-api-1.1.1.jar matches
Binary file /opt/apache-tomee-webprofile-1.7.1/lib/javaee-api-6.0-6-tomcat.jar matches

在两台机器上这个类存在于两个不同的 jar 里,从我读到的here Tomcat 应该加载 WEB-INF 中的内容,但 TomEE 1.7.1 并非如此。为了验证我是否使用 -verbose:class JVM 选项在两个 VM 上运行了应用程序,这是我所看到的:

#on TomEE 1.6.0
[Loaded javax.ws.rs.core.Response from file:/opt/cc/tomee/mlsvc/webapps/ROOT/WEB-INF/lib/jsr311-api-1.1.1.jar]

#on TomEE 1.7.1
[Loaded javax.ws.rs.core.Response from file:/opt/apache-tomee-webprofile-1.7.1/lib/javaee-api-6.0-6-tomcat.jar]

因此 TomEE 1.6.0 正在从 WEB-INF/lib 目录加载正确的类,但 1.7.1 正在从公共(public) lib 目录加载并忽略 WEB-INF 中的内容。我比较了两台机器上的 catalina.properties,但看不出有什么不同。有谁知道为什么会发生这种情况?

编辑:我刚刚尝试使用 TomEE 1.7.0,与 1.7.1 的行为相同

编辑: 我检查了 Tomcat 版本:TomEE 1.6.0 有 Tomcat 7.0.47,TomEE 1.7.1 有 7.0.55。这似乎是一个小升级,但我仍然想知道在类加载方面是否有任何变化。

最佳答案

首先你不应该在你的 webapp 中需要这个 jsr jar。

帽子说 EE API 由容器提供,并且 API 重载(您所做的)支持不是强制性的。 TomEE 甚至明确地跳过了这个 jar(您肯定在日志中有一条消息)。

关于java - 升级到 TomEE 1.7.1 后的类加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com