- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个在 AWS 上的 Tomcat 8.0.39 下完美运行的 Spring Boot WAR 应用程序。在发出 sudo service tomcat8 stop
、通过 sudo yum update
升级到 Tomcat 8.0.41 并重新启动实例后,应用程序没有启动。在 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)
这是 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
关于如何解决这个问题有什么建议吗?
更新 #1:
上述部分文件属于jaxws-ri
。事实证明,我将 JAX-WS RI 2.2.10 lib
目录中的一些 (10),但不是全部 (23) 的 jar 复制到了 Tomcat 的 lib
目录中.复制丢失的 13 个 jar 后,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
(上述文件的异常在日志文件中重复多次。看起来扫描器在启动时被重复调用,可能扫描不同的类路径。)
这告诉我,随着从 8.0.39 到 8.0.41 的过渡,Tomcat 突然对所有引用的 jar 的存在变得非常挑剔,即使应用程序在没有很多引用的情况下也能正常工作。此外,Tomcat 似乎对某些 jar 的特定构建非常讲究(例如,参见上面的 jaxb-core...
和 jaxb-api...
jar)。
现在,为了解决这个问题,我可以尝试找到所有这些丢失的 jar 并将它们复制到 Tomcat 的 lib
目录中。但是,由于通用名称(例如 config.jar
)或缺少版本号,我看不出有什么方法可以确保其中一些文件的正确来源。
那么,有没有办法防止 Tomcat 的 scan.StandardJarScanner.scan
对所有这些 jar 如此挑剔?
更新#2:
原来在Tomcat 8.0.38中,增加了一个设置来控制jar扫描,其值默认为true
。要关闭扫描,请在 context.xml
中添加以下行:
<Context>
...
<JarScanner scanManifest="false"/>
</Context>
详情请见 Provide an option to disable processing of Class-Path entry in a jar's manifest file .
最佳答案
有一个错误,Tomcat 8 忽略了 Class-Path
MANIFEST.MF
中的 header JAR 文件,请参阅 Bug 59226 :
Bug 59226 - StandardJarScanner ignores jars in manifest Class-path header
此错误已在 Tomcat 8.0.34 中修复,但它会针对不需要的 JAR 生成大量警告,请参阅 Bug 59961 :
Bug 59961 - Provide an option to disable processing of Class-Path entry in a jar's manifest file
从 Tomcat 8.0.38 开始,您可以禁用对 MANIFEST.MF
文件的扫描,请参阅 The Jar Scanner Component :
scanManifest
If true, the Manifest files of any JARs found will be scanned for additional class path entires and those entries will be added to the URLs to scan. The default is true.
关于java - 从 Tomcat 8.0.39 升级到 8.0.41 导致 'failed to scan' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42329948/
我几乎不敢在这里问这个问题,因为它似乎应该很容易通过谷歌或 ravendb.net 获得。但是,我一直很难找到将我的 RavenDB 升级到新版本的正确方法。我目前正在运行 573 版并希望升级到 6
这周我需要升级当前版本的 DNN。我目前使用的是 2.1.1。我不想每件事都做两次,所以,我有几个问题。 是否有升级工具或某些脚本可以帮助我进行升级。 我最好安装 4.9 还是 5.0。这是生产。 如
将 Sugarcrm 从 6.2 升级到 6.3 版本时遇到问题。当我升级本地 Sugarcrm 安装时,它可以工作,但是当我开始升级我的 Sugarcrm 6.2 站点并上传升级包时,它不会上传。
有没有办法绕过 Meteor 的自动更新功能?我坚持 Downloading meteor-tool@1.3.0_3... \ 当我尝试运行现有项目,或创建一个新项目或只是运行“
我已将应用内集成到我的 Andorid 应用程序中,用于单个产品 productone。 为此,我在我的 Google Play 控制台中创建了不同的产品 ID,如下所示: 1。 productone
我在将 TeamCity 版本 2017.1.1 升级到 2017.1.2 时遇到问题。这个问题涉及 TeamCity 和 PostgreSQL 的工作。我的工作: 停止 teamcity 进程 /e
我寻找了这个问题的具体答案,但找不到——即使是在 WAMPSERVER 网站上也是如此。我确定我忽略了它。 我有 Wampserver 2.0、MySQL 5.0.51b、PHP 5.2.6 和 Ap
我使用 Ubuntu 软件中心默认的 Eclipse 3.7。 我想将 Eclipse 升级到 kepler 版本,所以我添加了 repository 我收到以下错误消息: Cannot comple
你好 我只想安装 mercurial,但对于它需要 python 2.6 的所有版本,我尝试使用 .rpm 文件,但我唯一得到的是很多充满错误的行,它告诉我:需要安装在 2.6 之前和 2.5 之后的
我完全知道 Gradle 网站上有一些页面说明了如何升级,但仅限于 4.x 及更高版本。 我正在尝试关注 tutorial制作一个简单的“我的第一个”Minecraft 模组。在其中,您被告知安装 f
我们想升级 Kerberos(服务器和客户端) 当前:1.6.3-133.27.1 目标:1.6.3-133.49.97.1 问题是如果我们用包管理器升级它,下面会发生什么? KDC 数据库 所有主要
背景 原计划 2019 年发布的 Vue3,又经过一年的再次打磨,终于于去年 9 月正式发布。随后,不少 UI 组件库都积极参与适配,去年 12 月,Element-plus(
我有一个版本为 2.3.4 的 grails 项目,我需要尽可能升级到最新版本。查看文档我意识到从 2.x 到 3.x 有巨大的变化。 问题是:从 2 到 3、从 3 到 4、从 4 到 5 逐步升级
我正在将 API 项目从 .net5 升级到 .net6 它以前工作,现在它崩溃 内部异常消息“抛出了‘Unity.Exceptions.InvalidRegistrationException’类型
我将我的项目从 expo 44 升级到 expo 45,现在我有无数这样的错误: The module 'MaterialIcons' can't be used as JSX component.
我已经升级了掌 Helm 模板(手动) 以前的片段depoloyment.yaml : apiVersion: apps/v1beta2 kind: Deployment metadata: na
我正在尝试将我的 Scala Play Framework 应用程序升级到 2.8,这涉及将 SBT 升级到 1.x。 在我的 build.propeties 我有 sbt.version=1.3.5
我想在我的 Windows 服务器上安装 PHPUnit 3.7。我遵循了各种说明 here并以 PHPUnit 3.4.1 结束。当我尝试使用以下方法再次安装它时: pear update chan
Microsoft.Net 4.5 即将推出,我想在 MS 发布最终版本时升级我的 clickonce 应用程序。 我的问题是:已经安装了 clickonce 应用程序(使用 .net 4.0)的用户
为了将 Angular 8 更新到 9,我正在按照官方文档升级。 这建议首先更新到最新版本的 angular 8,例如: ng update @angular/core@8 @angular/cli@
我是一名优秀的程序员,十分优秀!