use*_*140 16 java tomcat jar upgrade file
我有一个Spring Boot WAR应用程序在AWS上的Tomcat 8.0.39下完美地工作.发出后sudo service tomcat8 stop,升级到Tomcat 8.0.41 sudo yum update,然后重新启动实例,应用程序无法启动.在catalina日志文件中,我看到了大量类型的异常:
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)
Run Code Online (Sandbox Code Playgroud)
以下是Tomcat抱怨的文件:
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
Run Code Online (Sandbox Code Playgroud)
对于如何解决这个问题,有任何的建议吗?
更新#1:
上面的一些文件属于jaxws-ri.事实证明,我将JAX-WS RI 2.2.10 lib目录中的一些(10)但不是全部(23)的jar 复制到Tomcat的lib目录中.在复制丢失的13个罐子之后,Tomcat在catalina日志文件中抱怨的文件列表缩小为:
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
Run Code Online (Sandbox Code Playgroud)
(上述文件的例外情况在日志文件中重复多次.看起来在启动时重复调用扫描程序,可能会扫描不同的类路径.)
这告诉我,随着从8.0.39到8.0.41的过渡,Tomcat突然变得非常挑剔所有引用的jar的存在,即使应用程序在没有很多它们的情况下工作得非常好.此外,Tomcat的有关特定构建一些罐的似乎是非常特定的(例如,请参阅jaxb-core...和jaxb-api...罐子以上).
现在,为了解决这个问题,我可以尝试找到所有这些丢失的jar并将它们复制到Tomcat的lib目录中.但是,由于通用名称(例如config.jar,或缺少版本号),我认为无法确保其中某些源的正确来源.
那么,有没有办法阻止Tomcat scan.StandardJarScanner.scan对所有这些罐子如此挑剔?
更新#2:
事实证明,在Tomcat 8.0.38中,添加了一个设置来控制jar扫描,其值默认为true.要关闭扫描,请在以下位置添加以下内容context.xml:
<Context>
...
<JarScanner scanManifest="false"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅 提供选项以禁用jar清单文件中的类路径条目的处理.
dur*_*dur 16
有一个错误,Tomcat 8忽略了JAR文件中的Class-Path标题MANIFEST.MF,请参阅错误59226:
错误59226 - StandardJarScanner忽略清单Class-path标头中的jar
使用Tomcat 8.0.34修复了这个错误,但它为不需要的JAR产生了很多警告,请参阅错误59961:
错误59961 - 提供禁用jar清单文件中Class-Path条目处理的选项
从Tomcat 8.0.38开始,您可以禁用MANIFEST.MF文件扫描,请参阅Jar扫描器组件:
scanManifest
如果为true,则将扫描找到的任何JAR的Manifest文件以获取其他类路径,并将这些条目添加到要扫描的URL中.默认值为true.