首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Tomcat 8.0.39升级到8.0.41会导致“扫描失败”错误

从Tomcat 8.0.39升级到8.0.41会导致“扫描失败”错误
EN

Stack Overflow用户
提问于 2017-02-19 16:45:45
回答 2查看 32.7K关注 0票数 21

我有一个Spring应用程序在Tomcat 8.0.39下在AWS上完美地工作。在发出sudo service tomcat8 stop、通过sudo yum update升级到Tomcat8.0.41并重新启动实例之后,应用程序不会启动。在catalina日志文件中,我看到了大量的异常类型:

代码语言:javascript
运行
复制
19-Feb-2017 10:27:15.326 WARNING [localhost-startStop-1] org.apache.tomcat.util.
scan.StandardJarScanner.scan Failed to scan [file:/usr/share/java/tomcat8/javax.
annotation-api.jar] from classloader hierarchy
 java.io.FileNotFoundException: /usr/share/java/tomcat8/javax.annotation-api.jar
 (No such file or directory)

下面是Tomcat抱怨的文件:

代码语言:javascript
运行
复制
javax.annotation-api.jar
jsr181-api.jar
jaxb-api.jar
javax.xml.soap-api.jar
FastInfoset.jar
mimepull.jar
saaj-impl.jar
stax2-api.jar
woodstox-core-asl.jar
jaxb-core-2.2.10-b140802.1033.jar
jaxb-api-2.2.12-b140109.1041.jar
istack-commons-runtime-2.19.jar
txw2-2.2.10-b140802.1033.jar
hk2-core.jar
class-model.jar
config.jar
auto-depends.jar
javax.inject.jar
hk2-api.jar
osgi-resource-locator.jar
tiger-types.jar
bean-validator.jar
jtype.jar

对如何解决这个问题有什么建议吗?

更新#1:

上面的一些文件属于jaxws-ri。原来,我有一些(10),但不是全部(23),来自JAX 2.2.10 lib目录的JAX被复制到Tomcat的lib目录中。复制丢失的13个jars之后,Tomcat在catalina日志文件中抱怨的文件列表缩小到:

代码语言:javascript
运行
复制
jaxb-core-2.2.10-b140802.1033.jar
jaxb-api-2.2.12-b140109.1041.jar
istack-commons-runtime-2.19.jar
txw2-2.2.10-b140802.1033.jar
hk2-core.jar
class-model.jar
config.jar
auto-depends.jar
javax.inject.jar
hk2-api.jar
osgi-resource-locator.jar
tiger-types.jar
bean-validator.jar
jtype.jar

(上述文件的异常在日志文件中重复多次。看起来扫描仪在启动时会被反复调用,可能会扫描不同的类路径。)

这告诉我,随着从8.0.39到8.0.41的转换,Tomcat突然对所有引用的jars的存在变得非常挑剔,尽管应用程序在没有很多jars的情况下运行得非常好。此外,Tomcat似乎对某些jars的特定构建非常挑剔(例如,请参阅上面的jaxb-core...jaxb-api... jars )。

现在,为了解决这个问题,我可以尝试找到所有这些丢失的jars,并将它们复制到Tomcat的lib目录中。但是,由于通用名称(如config.jar )或缺少版本号,我无法确保其中一些代码的正确来源。

那么,有没有办法防止Tomcat的scan.StandardJarScanner.scan对所有这些罐子如此挑剔呢?

更新#2:

结果表明,在Tomcat8.0.38中,向控制jar扫描添加了一个设置,其值默认为true。若要关闭扫描,请在context.xml中添加以下行

代码语言:javascript
运行
复制
<Context>
  ...
  <JarScanner scanManifest="false"/>
</Context>

有关详细信息,请参阅提供一个选项来禁用jar清单文件中的类路径条目的处理

EN

回答 2

Stack Overflow用户

发布于 2017-03-24 14:52:03

有一个错误,Tomcat 8忽略了JAR的Class-Path文件中的MANIFEST.MF头,请参阅Bug 59226

Bug 59226 - StandardJarScanner忽略清单类路径头中的jars

这个bug是用Tomcat8.0.34修复的,但是它为不需要的JAR产生了很多警告,参见Bug 59961

Bug 59961 -提供一个选项来禁用jar清单文件中类路径条目的处理

由于Tomcat8.0.38可以禁用MANIFEST.MF文件的扫描,请参见Jar扫描仪组件

scanManifest 如果是的话,找到的任何JAR的报表文件都将被扫描以获得额外的类路径实体,并且这些条目将被添加到要扫描的URL中。默认值为真。

票数 19
EN

Stack Overflow用户

发布于 2022-02-12 08:44:39

您可以添加以下行

我也有过同样的问题

server.tomcat.additional-tld-skip-patterns=*.jar

在application.properties文件中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42329948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档