Springのチュートリアルでtomcatが起動しなかった

開発

Springを勉強中です。

Designing and Implementing a Web Application with Spring
でbuild.gradleにtomcatの設定をしてサーブレットが動くようになるんですが、
tomcatRunWarを実行してもexceptionが出て失敗する…

StandardWrapper.Throwable
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/Users/Tono/IdeaProjects/tut-web-master/3/complete/build/tmp/tomcatRunWar/work/Tomcat/localhost/_/WEB-INF/classes/com/yummynoodlebar/web/controller/SiteController.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [/Users/Tono/IdeaProjects/tut-web-master/3/complete/build/tmp/tomcatRunWar/work/Tomcat/localhost/_/WEB-INF/classes/com/yummynoodlebar/web/controller/SiteController.class]; nested exception is java.lang.IllegalArgumentException
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:290)
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
    at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:123)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:191)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:165)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:140)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:282)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:505)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    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:744)

なんじゃこりゃーっていろいろ調べていたのですがわからず。

ただ、exceptionの長い2行目を良ーく見てみると、

probably due to a new Java class file version that isn’t supported yet

と。

あー、そういえば、Intelli Jにインポートしたときに、JDKのバージョンが1.8になってたんだ。
Java8に正式対応したのはSpring4からなんで、このチュートリアルではJava7使わないといけませんね。

というわけで、Project StructureからJDKを1.7に変更。

あと、tomcatStopを実行しても止まってくれないのでbuild.gradleに下記を追加。

[tomcatRun, tomcatRunWar, tomcatStop]*.stopPort = 8080
[tomcatRun, tomcatRunWar, tomcatStop]*.stopKey = ‘foo’

gradleのコマンドはよく分からないのでclean, build, warを適当に実行して、
tomcatRunWarでやっと見えた。

めでたしめでたし。

実際の現場で使うときはSpring4にしなきゃなぁ。
でもSpring Security 3.2はSpring4でもテストしてあるって書いてあるし、4で問題なさそう。

コメント

タイトルとURLをコピーしました