Spring tool suiteで既存のWebプロジェクトをmavenプロジェクトに変換したときに出たエラー

Spring tool suiteで既存のWebプロジェクトをmavenプロジェクトに変換したときに出たエラー

Spring tool suiteで既存のWebプロジェクトをmavenプロジェクトに変換したときに出たエラー

事象

仕事の関係で、元々既存であったプロジェクトのjarファイルの読み込みをmavenから行うといったことをやりまして・・・
その時に出たトラブルメモです。

まずSTSへプロジェクトをインポートします。
パッケージエクスプローラーで右クリック→インポート→既存プロジェクトをワークスペースへ

そしてプロジェクトをmavenに変換。
インポートしたプロジェクトを右クリック→構成→mavenプロジェクトへ変換

で、無事pom.xmlが作成され、に色々と必要なjarファイルを追加していきサーバーで実行!
はいエラー!!

エラー内容

コンソール上には処理が表示されず、デプロイしたところにアクセスすると404が・・・

早速STS(eclipse)のログを確認する。
~\develop\sts-bundle\pivotal-tc-server-developer-3.2.6.RELEASE\base-instance\logs
ここにデプロイする時に色々とログが吐き出されるわけで・・・

で、以下の二つのログを確認しました。
catalina.2017-08-28.log

28-Aug-2017 14:21:24.567 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor 設定記述子 C:\develop\sts-bundle\pivotal-tc-server-developer-3.2.2.RELEASE\base-instance\conf\Catalina\localhost\sampleapp.xml を配備します
28-Aug-2017 14:21:24.622 警告 [localhost-startStop-1] org.apache.catalina.startup.SetContextPropertiesRule.begin [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:sampleapp' did not find a matching property.
28-Aug-2017 14:21:27.933 警告 [localhost-startStop-1] org.apache.tomcat.jdbc.pool.ConnectionPool.checkPoolConfiguration initialSize is larger than maxActive, setting initialSize to: 4
28-Aug-2017 14:21:27.934 警告 [localhost-startStop-1] org.apache.tomcat.jdbc.pool.ConnectionPool.checkPoolConfiguration minIdle is larger than maxActive, setting minIdle to: 4
28-Aug-2017 14:21:27.934 警告 [localhost-startStop-1] org.apache.tomcat.jdbc.pool.ConnectionPool.checkPoolConfiguration maxIdle is smaller than minIdle, setting maxIdle to: 4
28-Aug-2017 14:21:28.876 情報 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
28-Aug-2017 14:21:31.407 重大 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate container log file
28-Aug-2017 14:21:31.407 重大 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal 以前のエラーのためにコンテキストの起動が失敗しました [/sampleapp]
28-Aug-2017 14:21:31.430 警告 [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [sampleapp] registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
28-Aug-2017 14:21:31.436 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of configuration descriptor C:\develop\sts-bundle\pivotal-tc-server-developer-3.2.2.RELEASE\base-instance\conf\Catalina\localhost\sampleapp.xml has finished in 6,867 ms

localhost.2017-08-28.log

28-Aug-2017 15:02:39.006 情報 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
28-Aug-2017 15:02:41.668 情報 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing log4j from [classpath:log4j.properties]
28-Aug-2017 15:02:41.688 重大 [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart フィルタ securityValidateFilter の起動中の例外です
 java.lang.ClassNotFoundException: ~.filter.SecurityValidateFilter
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
	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:118)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4572)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5215)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:596)
	at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1805)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

原因

一つずつエラー内容を見ていく。
まず、catalina.2017-08-28.logで気になるところは
「以前のエラーのためにコンテキストの起動が失敗しました」と表示されている部分。
これは、web.xmlやcontext.xmlのfilterなどの設定がおかしいと出力されるエラーとのこと。
Webアプリケーションのソースが間違えてるとかのエラーではないのね。

けど今回は既存のプロジェクトからmavenプロジェクトに変換して「ただ」実行しただけ。(依存関係はちょっといじったけど・・
ということで別のログを見る。

localhost.2017-08-28.logのログを見たらはっきりとエラーの事象が出てた。
context.xmlで設定していたsecurityValidateFilterでエラーが起きていた。ついでに原因はClassNotFoundException。

でもこれちゃんとpom.xmlで依存関係設定したjarファイルじゃん!!なんで読み込めてないの!!

結果はmavenの依存関係で取得したjarファイルが、WEB-INF/lib配下に読み込めていなかったから。

Web アプリの場合、実行時に必要なライブラリは「WEB-INF/lib」内になければいけない。
でも、mavenで依存関係を設定しただけではいいように取り計らってくれなくて自分で必要が設定だったというわけ。

解決策

プロジェクトを右クリック→プロパティ→デプロイメント・アセンブリー
ここの項目に、Maven依存関係とWEB-INF/libがちゃんと設定されているかどうか確認する。

無い場合は
追加→Javaビルド・パス・エントリー→Maven依存関係→完了

で、実行。無事に動きました。

mavenカテゴリの最新記事