Spring Boot Web JSP – Javaコンパイラは利用できません
TomcatおよびJSPが組み込まれたスプリングブートWebアプリケーション。 JSPページを実行してアクセスしますが、次のエラーが発生します
$ mvn spring-boot:run ... java.lang.IllegalStateException: No Java compiler available at org.apache.jasper.JspCompilationContext.createCompiler(JspCompilationContext.java:235) ~[tomcat-embed-jasper-8.5.6.jar:8.5.6] at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) ~[tomcat-embed-jasper-8.5.6.jar:8.5.6] at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368) ~[tomcat-embed-jasper-8.5.6.jar:8.5.6] at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) ~[tomcat-embed-jasper-8.5.6.jar:8.5.6] at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) ~[tomcat-embed-jasper-8.5.6.jar:8.5.6] at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.5.6.jar:8.5.6] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) [tomcat-embed-core-8.5.6.jar:8.5.6] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.6.jar:8.5.6] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
環境:
-
Spring Boot 1.4.2.RELEASE
-
Tomcat Embed 8.5.6
1. スプリングブート環境
JSPをコンパイルするには、tomcat-embed-jasper
が必要です。
pom.xml
org.springframework.boot spring-boot-starter-parent 1.4.2.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.apache.tomcat.embed tomcat-embed-jasper provided javax.servlet jstl
プロジェクトの依存関係を表示:
$ mvn dependency:tree [INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.2.RELEASE:provided [INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.6:provided [INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.6:provided [INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.6:provided [INFO] +- org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.6:provided [INFO] | \- org.eclipse.jdt.core.compiler:ecj:jar:4.5.1:provided [INFO] \- javax.servlet:jstl:jar:1.2:compile
2. 溶液
tomcat-embed-jasper
がecjコンパイラを取得しなかった理由がわかりません。これを修正するために、Eclipseecj
を手動で宣言します。
pom.xml
org.springframework.boot spring-boot-starter-parent 1.4.2.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.apache.tomcat.embed tomcat-embed-jasper provided javax.servlet jstl org.eclipse.jdt.core.compiler ecj 4.6.1 provided
プロジェクトの依存関係を表示:
$ mvn dependency:tree [INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.2.RELEASE:provided [INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.6:provided [INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.6:provided [INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.6:provided [INFO] +- org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.6:provided [INFO] +- javax.servlet:jstl:jar:1.2:compile [INFO] \- org.eclipse.jdt.core.compiler:ecj:jar:4.6.1:provided