Jetty でデプロイされた Java Web アプリケーション (Spring を使用) があります。Windows マシンで実行しようとすると、すべてが期待どおりに機能しますが、Linux マシンで同じコードを実行しようとすると、次のように失敗します。
【通常起動時出力】
11:16:39.657 INFO [main] org.mortbay.jetty.servlet.ServletHandler$Context.log>(ServletHandler.java:1145) >16> Web アプリのルート システム プロパティを設定: 'webapp.root' = [/path/へ/ワーキング/ディレクトリ]
java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
java.lang.reflect.Method.invoke(Method.java:597) で
org.mortbay.start.Main.invokeMain(Main.java:151) で
org.mortbay.start.Main.start(Main.java:476) で
org.mortbay.start.Main.main(Main.java:94) で
原因: java.lang.ExceptionInInitializerError
org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:129) で
org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:51) で
org.mortbay.jetty.servlet.WebApplicationContext.doStart(WebApplicationContext.java:495) で
org.mortbay.util.Container.start(Container.java:72) で
org.mortbay.http.HttpServer.doStart(HttpServer.java:708) で
org.mortbay.util.Container.start(Container.java:72) で
org.mortbay.jetty.Server.main (Server.java:460) で
... 7 つ以上
原因: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: 適切なログ コンストラクターがありません [Ljava.lang.Class;@15311bd for org.apache.commons.logging.impl.Log4JLogger (Caused java.lang.NoClassDefFoundError による: org/apache/log4j/Category) (org.apache.commons.logging.LogConfigurationException: 適切なログ コンストラクター [Ljava.lang.Class;@15311bd for org.apache.commons.logging. impl.Log4JLogger (java.lang.NoClassDefFoundError: org/apache/log4j/Category が原因)
org.apache.commons.logging.impl.LogFactoryImpl.newInstance (LogFactoryImpl.java:543) で
org.apache.commons.logging.impl.LogFactoryImpl.getInstance (LogFactoryImpl.java:235) で
org.apache.commons.logging.impl.LogFactoryImpl.getInstance (LogFactoryImpl.java:209) で
org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351) で
org.springframework.util.SystemPropertyUtils.(SystemPropertyUtils.java:42) で
... 14以上
原因: org.apache.commons.logging.LogConfigurationException: 適切なログ コンストラクターがありません [Ljava.lang.Class;@15311bd for org.apache.commons.logging.impl.Log4JLogger (java.lang.NoClassDefFoundError が原因: org/apache /log4j/カテゴリ)
org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor (LogFactoryImpl.java:413) で
org.apache.commons.logging.impl.LogFactoryImpl.newInstance (LogFactoryImpl.java:529) で
... 18以上
原因: java.lang.NoClassDefFoundError: org/apache/log4j/Category
java.lang.Class.getDeclaredConstructors0(ネイティブメソッド)で
java.lang.Class.privateGetDeclaredConstructors (Class.java:2389) で
java.lang.Class.getConstructor0 (Class.java:2699) で
java.lang.Class.getConstructor (Class.java:1657) で
org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor (LogFactoryImpl.java:410) で
... 19件以上
原因: java.lang.ClassNotFoundException: org.apache.log4j.Category
java.net.URLClassLoader$1.run(URLClassLoader.java:200) で
java.security.AccessController.doPrivileged(ネイティブメソッド)で
java.net.URLClassLoader.findClass(URLClassLoader.java:188) で
java.lang.ClassLoader.loadClass(ClassLoader.java:307) で
java.lang.ClassLoader.loadClass(ClassLoader.java:252) で
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)で
... 24以上
【シャットダウン出力】
でアプリを実行しました。java -verbose:classその出力によると、最初の例外がスローされる直前に、/WEB-INF/lib の log4j JAR から org.apache.log4j.Category がロードされます。
現在、2 つのマシンの Java バージョンはわずかに異なります。どちらのマシンにも Sun の Java があり、Linux マシンには 1.6.0_10 があり、Windows マシンには 1.6.0_08 か、または 07 または 06 があります。正確な番号は今思い出せず、手元にマシンがありません。 . しかし、Java のマイナー バージョンがわずかに異なっていても、コードがこのように壊れることはありません。誰かがここで何が悪いのか理解していますか?