EclipseからTomcatを起動できなくなった
しばらく前から、EclipseのTomcatPluginからTomcatを起動しようとすると以下のようなExceptionが発生して起動できない状態になっていました。
0 [main] ERROR digester.Digester - Begin event threw exception java.lang.ClassNotFoundException: org.apache.catalina.core.StandardServer at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at org.apache.commons.digester.ObjectCreateRule.begin(ObjectCreateRule.java:252) at org.apache.commons.digester.Rule.begin(Rule.java:200) at org.apache.commons.digester.Digester.startElement(Digester.java:1273) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1637) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:634) at org.apache.crimson.parser.Parser2.parse(Parser2.java:333) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448) at org.apache.commons.digester.Digester.parse(Digester.java:1548) at org.apache.catalina.startup.Catalina.start(Catalina.java:449) at org.apache.catalina.startup.Catalina.execute(Catalina.java:400) at org.apache.catalina.startup.Catalina.process(Catalina.java:180) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
整理すると、あるプロジェクト(Tomcatプロジェクト)から、別のプロジェクトを参照したい
→TomcatPluginの設定にて「JavaプロジェクトをTomcatのクラスパスに追加する」に追加
→上記例外が発生する
インターネットで検索をしたいたところ@IT会議室にて以下のようなスレッドがありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=9971
どうも、ほとんど同件だとは思うのですが、投稿者のコメントがないのでわかりませんが解決していないように見えます…。
設定にて「JavaプロジェクトをTomcatのクラスパスに追加する」から、そのぷロジェクトを外すとその例外は発生しませんが、当然、NoClassDefFoundErrorが発生します。不思議なことに、そのTomcatプロジェクトから参照している別のプロジェクトが「JavaプロジェクトをTomcatのクラスパスに追加する」にてチェックされていてもこの問題は発生しません。
結局、根本的な原因はわかりませんが、参照しているプロジェクトに最近、Digesterのライブラリを追加したのが影響しているということはわかりました。Digesterを使用するクラスを別のプロジェクトに移動するという本末転倒的な対処をしたところ発生しなくなったのですが、これは、Tomcat Pluginの問題なのでしょうかね??