2017-03-14 14 views
0

最近、私の同僚が辞任して退社しました。 Struts2を使ってjavaプログラムを手渡しました。しかし、彼はソースコードのみを提供しています。私はこのプログラムに関する書類を持っておらず、見つけられません。残念ながら、私はjavaやstruts2が良くないので、あなたのアドバイスをお願いしたいと思います。jarファイルでjava.lang.NoClassDefFoundErrorが発生する

私はプログラムがさまざまなjarファイルを使用していることに気付きました。struts2-core-2.3.24.1、struts2-json-plugin-2.3.24.1と呼ばれるいくつかのjarファイルがあるため、strutsはApache Struts2バージョン2.3.24.1を使用しています。 struts2-spring-plugin-2.3.24.1およびstruts2-tiles-plugin-2.3.24.1を参照してください。

これらの3つの記事1,2および3を参照すると、Apache Struts2には脆弱性があり、プログラムをバージョン2.3.32にアップグレードする必要があると思います。

しかし、私はstrutsバージョン2.3.32にすぐにアップグレードすることはできません。プログラム全体をバックアップし、strutsバージョン2.3.24.3にアップグレードしようとしています。このwesiteから2.3.24.1の次のバージョンは2.3です.24.3。さらに、私はプログラム内のコードを変更しないようにしています。そこで私はまずjarファイルをアップグレードし始めます。

があるために、多くのjar filesHereは私がプロジェクトをきれいにし、プログラムを実行し、私はStruts2のバージョン2.3.24.3

javassist-3.11.0.GA 
ognl-3.0.6.1 
struts2-core-2.3.24.3 
struts2-dojo-plugin-2.3.24.3 
struts2-json-plugin-2.3.24.3 
struts2-spring-plugin-2.3.24.3 
struts2-tiles-plugin-2.3.24.3 
xwork-core-2.3.24.3 

用にアップグレードjarファイルです。正常に実行されます(例外は発生しません)ので、Jarsファイルを2.3.24.3から2.3.32にアップグレードします。

ここで私がプログラムに追加したアップグレードされたjarファイルです。以前のバージョンは削除されています。残りの瓶は同じままです。

struts2-core-2.3.32 
struts2-dojo-plugin-2.3.32 
struts2-json-plugin-2.3.32 
struts2-spring-plugin-2.3.32 
struts2-tiles-plugin-2.3.32 

私はプロジェクトをクリーンアップしてプログラムを実行します。これは、java.lang.NoClassDefFoundErrorに関するエラーを取得します。

ここはエラーです。私は "... 19 more"があるのが奇妙に感じますが、私はこれらの19のメッセージを見つけることができません。私はログファイルを検索します。 catalina.yyyy-mm-dd.log、localhost_access_log.yyyy-mm-dd/txt。意外なことに、これらのログファイルには2日前のログが含まれています。

SEVERE: Error configuring application listener of class org.apache.struts2.tiles.StrutsTilesListener 
java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/AbstractTilesListener 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2472) 
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase .java:854) 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274) 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:520) 
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:501) 
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:120) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4651) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: org.apache.tiles.web.startup.AbstractTilesListener 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
... 19 more 

Mar 14, 2017 11:58:38 AM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Skipped installing application listeners due to previous error(s) 
Mar 14, 2017 11:58:38 AM org.apache.catalina.core.StandardContext startInternal 
SEVERE: One or more listeners failed to start. Full details will be found in the appropriate container log file 
Mar 14, 2017 11:58:38 AM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Context [/RIDW] startup failed due to previous errors 
Mar 14, 2017 11:58:38 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-nio-8080"] 
Mar 14, 2017 11:58:38 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-nio-8009"] 
Mar 14, 2017 11:58:38 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 6698 ms 

私はエラーpost1post2post3post4を解決する方法についてのこれらの記事を読みました。

しかし、私が理解していないことの1つは、バージョン2.3.24.1から2.3.24.3へのJarファイルを適用するときです。プログラムにはエラーはありません。それから、同様のプロセス(2.3.24.3から2.3.32へのjarの変更)を実行すると、プログラムを実行するとエラーが発生します。この2つのプロセスでは、プログラム内にコードを記述したり編集したりすることはありません。jarファイルを変更するだけです。

2.3.24.1から2.3.24.3までの各jarファイルを比較して、異なるjarファイルを見つけ、それらの異なるjarファイルを使用して元のプログラムjarファイルと比較してエラーを修正しますか?あなたの助言に感謝してください。ありがとうございました。 (この記事は、誰かがそれを削除するために私を助けるだろう、ここに投稿することが適切でない場合は、注意してください。おかげで)

更新

を私は、時間のダウンロードの瓶の多くを費やすし、pom.xmlファイルを見つけます。しかし、そのファイルはプログラムには存在しないので、このプログラムはjarsを手動で追加または削除する必要があります。ここで

は、私がストラットバージョンへのアップグレードのためのプログラムに追加更新瓶は新しい瓶とアップグレードされたjarファイルをプログラムに入れられているが、私はまだ同じエラーを取得2.3.32

struts2-core-2.3.32 
struts2-dojo-plugin-2.3.32 
struts2-json-plugin-2.3.32 
struts2-spring-plugin-2.3.32 
struts2-tiles-plugin-2.3.32 
commons-beanutils-1.8.0 
commons-collections-3.2.2 
commons-fileupload-1.3.2 
commons-io-2.2 
commons-logging-1.1.3 
javassist-3.11.0.GA 
jcl104-over-slf4j-1.5.8 
ognl-3.0.19 
slf4j-api-1.7.12 
slf4j-jdk14-1.5.8 
spring-test-3.0.5.RELEASE 
spring-web-3.0.5.RELEASE 
tiles-api-2.2.2 
tiles-core-2.2.2 
tiles-jsp-2.2.2 

です。私はそのエラーについてとても混乱しているように感じます。

バージョンを2.3.24.1から2.3.24.3にアップグレードする場合。プログラムはうまくいきます(私はまだ何もテストしていません。ただサーバーを起動してプログラムの最初のページを開くことができます)。

2.3.24.1から2.3.32にバージョンをアップグレードすると、サーバーが正しく起動せず、エラーが表示されます。

また別の事は私が変な感じさせるそれでもエラーが同じである、新しいエラーはありません(多分まだ発生していない)

+0

Apacheタイルを「2.2.2」に更新します。 –

+0

@AleksandrM、ご意見ありがとうございます。私はプログラムにApache Tiles 2.2.2を追加します。私がサーバを起動しても、私は同じエラーが表示されます。私はタイルについて同じエラーが出るのは奇妙に感じます。新しいエラーが発生した場合は、そのエラーをトレースして問題を修正することができますが、エラーは同じです。 – Learner

答えて

0

私は、任意のJARファイルをアップグレードする前に、Apache Struts Migration Guideを読んですることをお勧めいたします。

バージョン2.3.28の少なくとも1つの重要な内部変更が見逃されました。この時点で、tiles-pluginはこの時点で最新のバージョンに更新されました。 (エラーjava.lang.NoClassDefFoundError: org/apache/tiles/web/startup/AbstractTilesListener

一般的なアドバイス

JAR-ファイルは、多くの場合、依存関係持っているので、あなたがすることはできません(とはならない)だけでその要件についての知識がなくても1つのJARを交換してください。この場合、より新しいstruts-tiles-pluginはより新しいタイル依存性を必要とします。

これをすべて手作業で行う前に、あなたを助ける素晴らしいツールがあり、多くのプロジェクトでそれを使用しています。それはMavenと呼ばれています。あなたのプロジェクトにpom.xmlはありますか?これにより、これらの依存関係をすべて簡単に処理できます。

+0

あなたの答えとアドバイスをいただきありがとうございます。私は新しい瓶を追加し、瓶をアップグレードし、私は同じエラーが発生します。私はタイルについて同じエラーが出るのは奇妙に感じます。新しいエラーが発生した場合は、そのエラーをトレースして問題を修正することができますが、エラーは同じです。 – Learner

関連する問題