Maven 整合Struts2遇到的 “Unable to compile class for JSP”问题解决方法
按照正常步骤在Maven下整合Struts2,控制台启动正常,没有报错,但是在浏览器访问URL时发现如下问题,搞了整整一下午,终于找到问题所在,心痛时间啊!
错误类型如下:浏览器报错:
Struts2开发模式下报错:
控制台报错:
10月 06, 2018 9:09:27 下午 org.apache.jasper.compiler.JDTCompiler$1 findType
严重: Compilation error
org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:342)
at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:206)
at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:163)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:96)
at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
………………….
10月 06, 2018 9:09:27 下午 org.apache.catalina.core.ApplicationDispatcher invoke
严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files
An error occurred at line: 1 in the generated java file
The type java.lang.Class cannot be resolved. It is indirectly referenced from required .class files
An error occurred at line: 23 in the generated java file
The method getName() is undefined for the type Class
Stacktrace:
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
………….
其实最核心的错误原因是:compilation error 且 Unable to compile class for JSP:
通过全网查找,最终定位问题的原因是:tomcat版本过低或者jdk的版本过高所致的!所以去升级本地安装的tomcat版本,升级后来发现,这是一个巨大的错误,没有作用!原因是:maven中使用的tomcat运行方式是jar包的运行方式,与本地安装的tomcat服务器无关。Maven命令: mvn tomcat:run 默认的执行的tomcat版本是6.0版本的tomcat,所以以现在的大部分运行的jdk版本来说的话,肯定会存在不兼容的问题。启动mvn tomcat:run之后可查看maven运行tomcat版本,如下:
最终的解决方式是通过修改maven配置的方式解决:
1.在pom.xml文件中增加如下插件配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
2.运行是命令选择: mvn tomcat7:run
再在浏览器中访问,问题完美解决!!!
其实最核心的原因是 ::tomcat版本太低或者 jdk版本太高! 版本问题坑死人啊!