JSP 使用 TomEE Embedded 的编译错误和 Java 8
JSP compilation error using TomEE Embedded and Java 8
在 TomEE Embedded 中尝试访问基本 JSP 文件 运行 时,出现内部服务器错误并显示以下错误消息:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [1] in the generated java file: [/tmp/apache-tomee814337484264703144/work/Tomcat/localhost/sample/org/apache/jsp/index_jsp.java]
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:485)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
我正在使用 Java 8 和(当前)最新版本的 TomEE Embedded (1.7.2)。这些是我的 POM 文件中的依赖项:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-embedded</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
问题与我的 JSP 文件的内容无关,因为它大部分是空的:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
<h1>Sample</h1>
</body>
</html>
有没有人遇到过同样的问题?有人有解决方法吗?
经过更多的研究和实验,我自己弄明白了。
以防万一有人遇到同样的问题:这个问题似乎与 TomEE 用来编译 JSP 文件。由于 class 格式在 Java 8 中发生了一些变化,旧版本的编译器似乎变得混乱。
我已经引入了更新版本的 Eclipse Java 编译器 (4.4.2),并从 TomEE 中排除了旧版本,现在一切都按预期工作:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-embedded</artifactId>
<version>1.7.2</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.4.2</version>
</dependency>
</dependencies>
在 TomEE Embedded 中尝试访问基本 JSP 文件 运行 时,出现内部服务器错误并显示以下错误消息:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [1] in the generated java file: [/tmp/apache-tomee814337484264703144/work/Tomcat/localhost/sample/org/apache/jsp/index_jsp.java]
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:485)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
我正在使用 Java 8 和(当前)最新版本的 TomEE Embedded (1.7.2)。这些是我的 POM 文件中的依赖项:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-embedded</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
问题与我的 JSP 文件的内容无关,因为它大部分是空的:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
<h1>Sample</h1>
</body>
</html>
有没有人遇到过同样的问题?有人有解决方法吗?
经过更多的研究和实验,我自己弄明白了。
以防万一有人遇到同样的问题:这个问题似乎与 TomEE 用来编译 JSP 文件。由于 class 格式在 Java 8 中发生了一些变化,旧版本的编译器似乎变得混乱。
我已经引入了更新版本的 Eclipse Java 编译器 (4.4.2),并从 TomEE 中排除了旧版本,现在一切都按预期工作:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-embedded</artifactId>
<version>1.7.2</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.4.2</version>
</dependency>
</dependencies>