2016-04-05 57 views
2

tomcat8にjarのクラスがロードされている順番を知っている人はいますか?Tomcat 8のクラスパスとjarファイルのロード順序

ここに私たちのシナリオがあります: 私たちは2つの全く同じサーバー(ハードウェアとOS)を持っています。どちらもJava 1.7.65を実行しており、バージョン8.0.32にはTomcatがインストールされています。 StartとVMパラメータはまったく同じで、アプリケーション固有の設定です(2台目のマシンは単なる冗長システムです)。唯一の違いは、IPアドレスともちろんホスト名です。

Tomcat7からTomcat8への最近のアップグレード(両方のシステムで)の後、slf4jからのメッセージが無視され、アプリケーションの起動時に "複数のバインディングが見つかりました"というメッセージが表示されましたが、適切なロギングから - クラスローディングのソート/順序付け。 これは、1つのシステムが最初にlogback-classic-1.0.13.jarをロードし、2番目のシステムslf4j-log4j12-1.6.6.jar getが最初にロードされるためです。私たちはlogback.xmlとlog4j.xmlを配備していないので、ロードされたStaticLoggerBinderが正しいものではないため、正しいファイルにログメッセージが表示されません。

出力システム-2

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). 

からの出力(はい、私はMavenの依存関係を経由して、それを修正する方法を知っていると私は確かに重複/冗長な依存関係を削除します

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
16:50:26,740 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 
16:50:26,740 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 
16:50:26,741 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/classes/logback.xml] 

システム-1から私のポンから... O :-))

ここで私の質問は、2つの絶対的に同一のシステムでどのように注文が異なる可能性がありますか?

答えて

0

Javaはクラスパスで指定された順序でクラスをロードします。

Tomcatは他のJavaプログラムと同じ方法でクラスパスを解決しません。 CLASSPATH環境変数、または-classpathコマンド行フラグを使用します。また、Tomcatがクラスパスを解決する方法は、メジャーリリースごとに変更できます(これがあなたの問題が導入された理由かもしれません)。あなたの答えのためのUnderstanding the Tomcat classpath

+0

感謝を:

私はあなたの将来にこの上の多くの読書を参照してください:) ここでは、開始するためにどこかに良いです。はい、私たちはすでに、システム上の最後の変更がtomcatバージョンのアップグレードであったため、Tomcatで何かをしなければならないことをすでに知っていました。とにかく、私はまだ、同じソフトウェアバージョンを実行している2つの同一のシステム間でどのように、どのように読み込みマカニズムが異なるのだろうと想像することはできません。 – limepix

関連する問題