Spring起動Web JSP - Javaコンパイラは使用できません

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)

環境:

  1. Spring Boot 1.4.2.RELEASE

  2. 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
Related