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 のマイナー バージョンがわずかに異なっていても、コードがこのように壊れることはありません。誰かがここで何が悪いのか理解していますか?