
###前提・実現したいこと
脆弱性対策のため、
Struts2 2.3.24 で作成されたWebアプリを、
Struts2 2.3.34にアップデートを行っております。
その際に、他のPluginのバージョンアップは問題なく済んだのですが、
struts2-tiles-pluginのみエラーが解消しなくて、
Tomcat起動時に、java.lang.NoClassDefFoundErrorが発生してアプリが起動しません。
情報を色々集めたのですが、手詰まりになったのでここに質問させてもらいました。
###発生している問題・エラーメッセージ
10:42:53.979 [localhost-startStop-1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/test] - クラス org.apache.struts2.tiles.StrutsTilesListener のアプリケーションリスナの設定中にエラーが発生しました
java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/AbstractTilesListener
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_40]
at java.lang.ClassLoader.defineClass(ClassLoader.java:760) ~[?:1.8.0_40]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_40]
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2472) ~[catalina.jar:8.0.20]
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854) ~[catalina.jar:8.0.20]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274) ~[catalina.jar:8.0.20]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) ~[catalina.jar:8.0.20]
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:520) ~[catalina.jar:8.0.20]
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:501) ~[catalina.jar:8.0.20]
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:120) ~[catalina.jar:8.0.20]
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4650) [catalina.jar:8.0.20]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5162) [catalina.jar:8.0.20]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.0.20]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) [catalina.jar:8.0.20]
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) [catalina.jar:8.0.20]
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) [catalina.jar:8.0.20]
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581) [catalina.jar:8.0.20]
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1683) [catalina.jar:8.0.20]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_40]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_40]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_40]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_40]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]
Caused by: java.lang.ClassNotFoundException: org.apache.tiles.web.startup.AbstractTilesListener
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) ~[catalina.jar:8.0.20]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) ~[catalina.jar:8.0.20]
... 23 more
10:42:53.988 [localhost-startStop-1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/test] - 前のエラーのためにアプリケーションリスナのインストールをスキップします
10:42:53.989 [localhost-startStop-1] ERROR org.apache.catalina.core.StandardContext - Error listenerStart
10:42:54.024 [localhost-startStop-1] ERROR org.apache.catalina.core.StandardContext - 以前のエラーのためにコンテキストの起動が失敗しました [/test]
###WEB-INF/libの内容
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.2.jar
commons-digester-2.0.jar
commons-fileupload-1.3.2.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
commons-logging-1.1.3.jar
doma-2.4.1.jar
doma-gen-2.4.1.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
log4j-api-2.10.0.jar
log4j-core-2.10.0.jar
log4j-jcl-2.10.0.jar
log4j-jul-2.10.0.jar
ognl-3.0.21.jar
struts2-codebehind-plugin-2.3.34.jar
struts2-config-browser-plugin-2.3.34.jar
struts2-convention-plugin-2.3.34.jar
struts2-core-2.3.34.jar
struts2-dojo-plugin-2.3.34.jar
struts2-json-plugin-2.3.34.jar
struts2-tiles-plugin-2.3.34.jar
super-csv-2.4.0.jar
super-csv-annotation-1.1.jar
tiles-api-2.2.2.jar
tiles-core-2.2.2.jar
tiles-freemarker-2.2.2.jar
tiles-jsp-2.2.2.jar
xwork-core-2.3.34.jar
###web.xmlの内容
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>test</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>test.web.action</param-value> </init-param> </filter> <listener> <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> <listener-class>com.test.web.settings.AppSettingsListener</listener-class> </listener> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>###tiles.xmlの内容
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd "> <tiles-definitions> ~~ </tiles-definitions>###試したこと
・~-2.3.24のプラグインを~-2.3.34のプラグインにバージョンアップ
それに関係するプラグインもバージョンアップ
・mavenを参考にして依存関係の確認
・NoClassDefFoundError自体は、classpathの問題であることが多いとあったので、
.classpathが全て通っているか確認
・tilesに関係しそうなpluginを以下の旧バージョンに戻したところ、エラー無く起動した。
struts2-tiles-plugin-2.3.24.jar
tiles-core-2.0.6.jar
tiles-freemarker-2.0.6.jar
tiles-jsp-2.0.6.jar
###回答を試した
jcl-over-slf4j-1.5.8.jar
slf4j-api-1.5.8.jar
を追加。
結果、エラーの内容が少し変わった。
アプリ共通ファイルが参照しているlog4jと今回追加したslf4jがうまくいってない感じ・・?
17:16:32.535 [localhost-startStop-1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/test] - クラス org.apache.struts2.tiles.StrutsTilesListener のアプリケーションリスナの設定中にエラーが発生しました
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223) ~[slf4j-api-1.5.8.jar:1.5.8]
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120) ~[slf4j-api-1.5.8.jar:1.5.8]
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) ~[slf4j-api-1.5.8.jar:1.5.8]
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269) ~[slf4j-api-1.5.8.jar:1.5.8]
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242) ~[slf4j-api-1.5.8.jar:1.5.8]
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) ~[jcl-over-slf4j-1.5.8.jar:1.1.3]
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131) ~[jcl-over-slf4j-1.5.8.jar:1.1.3]
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) ~[commons-logging-1.1.3.jar:1.1.3]
at com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory.getLoggerImpl(CommonsLoggerFactory.java:29) ~[xwork-core-2.3.34.jar:2.3.34]
at com.opensymphony.xwork2.util.logging.LoggerFactory.getLogger(LoggerFactory.java:56) ~[xwork-core-2.3.34.jar:2.3.34]
at org.apache.struts2.tiles.StrutsTilesListener.<clinit>(StrutsTilesListener.java:34) ~[struts2-tiles-plugin-2.3.34.jar:2.3.34]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_40]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_40]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_40]
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[?:1.8.0_40]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_40]
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:121) ~[catalina.jar:8.0.20]
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4650) [catalina.jar:8.0.20]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5162) [catalina.jar:8.0.20]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.0.20]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) [catalina.jar:8.0.20]
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) [catalina.jar:8.0.20]
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) [catalina.jar:8.0.20]
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581) [catalina.jar:8.0.20]
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1683) [catalina.jar:8.0.20]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_40]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_40]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_40]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_40]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) ~[catalina.jar:8.0.20]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) ~[catalina.jar:8.0.20]
... 30 more
###補足情報(言語/FW/ツール等のバージョンなど)
java8
tomcat8






回答1件
あなたの回答
tips
プレビュー