TomcatとJSPが埋め込まれたSpringブートWebアプリケーション。 JSPページを実行してアクセスしますが、次のエラーが発生します

$ mvn spring-boot:run
...

java.lang.IllegalStateException:Javaコンパイラが使用できない
        org.apache.jasper.JspCompilationContext.createCompiler(JspCompilationContext.java:235)〜[Tomcat-embed-jasper-8.5.6.jar:8.5.6]        org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)〜[Tomcat-embed-jasper-8.5.6.jar:8.5.6]        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368)〜[tomcat-embed-jasper-8.5.6.jar:8.5.6]        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)〜[Tomcat-embed-jasper-8.5.6.jar:8.5.6]        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)〜[Tomcat-embed-jasper-8.5.6.jar:8.5.6]        javax.servlet.http.HttpServlet.service(HttpServlet.java:729)[tomcat-embed-core-8.5.6.jar:8.5.6]        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)[tomcat-embed-core-8.5.6.jar:8.5.6]        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5.6.jar:8.5.6]        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)[tomcat-embed-websocket-8.5.6.jar:8.5.6]        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)[tomcat-embed-core-8.5.6.jar:8.5.6]        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5.6.jar:8.5.6]        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE]        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

環境:

。春のブート1.4.2.RELEASE
。 Tomcat埋め込み8.5.6

1.春のブート環境

JSPをコンパイルするには `tomcat-embed-jasper`が必要です。

pom.xml

</version> </version> 1.4.2.RELEASE </version> </version> 1.4.2.RELEASE </version>

<dependencies> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-web </artifactId> </dependency> <dependency> <groupId> org.springframework.boot </groupId > <artifactId> spring-boot-starter-tomcat </artifactId> <scope>提供された</scope> </dependency>

<scope>提供された</scope> </dependency> </object> </div>

<dependency> <groupId> javax.servlet </groupId> <artifactId> jstl </artifactId> </dependency>

</dependencies>

プロジェクトの依存関係を表示する:

$ mvn依存関係:ツリー

[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. Solution

No idea why

tomcat-embed-jasper

didn’t pick up the ecj compiler, to
fix this, declares the Eclipse

ecj

manually :

pom.xml

</version> </version> 1.4.2.RELEASE </version> </version> 1.4.2.RELEASE </version>

<dependencies> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-web </artifactId> </dependency> <dependency> <groupId> org.springframework.boot </groupId > <artifactId> spring-boot-starter-tomcat </artifactId> <scope>提供された</scope> </dependency>

<scope>提供された</scope> </dependency> </object> </div>

<依存関係>
            <groupId> javax.servlet </groupId>
            <artifactId> jstl </artifactId>
        </dependency>
        
        <! - これを追加 - >
        <依存関係>
            <groupId> org.eclipse.jdt.core.compiler </groupId>
            <artifactId> ecj </artifactId>
            <version> 4.6.1 </version>
            <scope>提供された</scope>
        </dependency>
        
    </dependencies>

プロジェクトの依存関係を表示する:

$ mvn依存関係:ツリー

[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