【发布时间】:2015-02-06 13:11:24
【问题描述】:
我正在用 Java 开发一个简单的 Web 应用程序,但是由于我已将计算机从 win7 更改为 mac os,因此无法部署我的应用程序。 在 SO 更改之前,我从 intellij 编译的代码/战争已毫无问题地部署到 debian。现在我得到这个(讨厌的)错误:
An error occurred at line: [1] in the generated java file: [/var/lib/tomcat8/work/Catalina/localhost/chat/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:199)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:438)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:361)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
在两台机器上我都安装了 JDK8 和 Tomcat8。 Debian CPU 是一个 ARMv6,一个树莓派。从 2012 年中期开始,我的 Mac OS 是 x64。 我已经在网上搜索过,尝试更新 Tomca8,编译到 java7 并部署到 Tomcat7 实例,这让我发疯了!!我认为这可能是一个跨平台问题,或者与类编译有关,但我找不到什么!
非常感谢任何帮助,谢谢
【问题讨论】:
-
堆栈跟踪中出现的
JDTCompiler类型表明Tomcat/Jasper 使用eclipse 编译器来编译JSP 源(源自Eclipse 模块JDT)。该编译器版本不必与 Eclipse IDE 中的相同。所以你要么更新 Tomcat 使用的 JDT,要么重新配置它以使用 ant/javac 而不是 jdt/ecj... -
查看您的堆栈跟踪。它试图编译 JSP 文件(或相关的东西),这些文件基本上是嵌入了 Java Source Code 的 Html 页面。它使用
JDTCompiler适配器来实现这一点,该适配器使用 Eclipse JDT,这与您正在使用的 JRE/JDK 没有任何关系。所以如果你不是手动安装的,它必须与你的tomcat捆绑在一起,我不知道你是否可以更新它。但是,适配器的存在表明此行为是可插拔的,您可以将其配置为使用javac。 -
如前所述,它与
Intellij无关。它是与 Tomcat 捆绑在一起的 Eclipse JDT,它不能处理 Java 8 类文件。如果您关注我链接的问题并查看its “Linked” section,您会看到很多类似的问题。 -
正如对链接问题的回答中所说:“有时,当它忽略类文件的较新版本号时,您可以使用较旧的编译器。”只要引用的类文件都没有使用编译器会遇到的功能,这将起作用。关于 Java 8,只有使用
static或default方法(或依赖于它们的类)的接口才有这种潜力。
标签: macos debian raspberry-pi java-8 tomcat8