我有一個Spring Boot WAR應用程序,完全可以在AWS上的Tomcat 8.0.39下運行。在發佈sudo service tomcat8 stop
後,升級到Tomcat 8.0.41到sudo yum update
,並重新啓動實例,應用程序無法啓動。在卡特琳娜的日誌文件,我看到一噸類型的異常:從Tomcat 8.0.39升級到8.0.41會導致'掃描失敗'錯誤
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)的目錄複製到Tomcat的lib
目錄中。拷貝丟失的13瓶後,在Tomcat中卡塔利娜日誌文件中抱怨的文件列表已經縮小到:
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突然變得非常挑剔所有引用的罐子的存在,即使應用程序工作沒有很多人都很完美。另外,Tomcat似乎對某些罐子的特定構造非常特別(例如參見上面的罐子jaxb-core...
和jaxb-api...
)。
現在,爲了解決這個問題,我可以嘗試找到所有這些遺漏的jar並將它們複製到Tomcat的lib
目錄中。但是,由於通用名稱(如config.jar
)或缺少版本號,我認爲沒有辦法確保其中某些源的正確來源。
那麼,有沒有辦法阻止Tomcat的scan.StandardJarScanner.scan
對所有這些罐子如此挑剔?
更新#2:
事實證明,在Tomcat的8.0.38,加入一個設置來控制罐掃描,其默認爲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.0.41需要它們(而8.0.39顯然沒有),那麼它們應該帶有'yum update',但顯然他們沒有。 – user1408140
因此,從'rpm -ql tomcat | more'開始,看看安裝的是什麼,並確保這些文件實際上是丟失的,而不是意想不到的。 –