Веб-JSP Spring Boot - Java-компилятор недоступен
Весеннее загрузочное веб-приложение с внедренными Tomcat и JSP. Запустите и получите доступ к странице 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. Spring Boot Environment
Для компиляции 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