Unable to compile class for JSP 错误解决

问题描述

创建一个maven的web项目,输入tomcat:run命令运行,结果访问项目网站,报错。错误如下:
在这里插入图片描述

解决方法

经过各种百度,阅读博客,发现问题出现在,maven自身集成了tomcat插件,且默认是使用tomcat6,我这里用的jdk 1.9,tomcat6并不支持jdk1.9,所以出了问题。

解决的方案是:
在项目中的pom.xml文件中的

<build>
  <plugins>
     在此处添加
  </plugins>
</build>

这里是maven所需要的的插件。
在这里加入如下代码:

              <plugin>
                  <groupId>org.apache.tomcat.maven</groupId>
                  <artifactId>tomcat7-maven-plugin</artifactId>
                  <version>2.2</version>
                </plugin>

之后再运行命令tomcat7:run即可正常运行,不再错误。

在这里插入图片描述
以上便是tomcat和jdk版本的对应。
不过我这里用的明明是jdk 1.9,换成tomcat7怎么还可以呢?在网上查了很多,很多人说是tomcat版本要大于jdk版本,这个结论确实很常见。
但是说实话我也看到一些评论说是jdk1.8+tomcat7用的好的很,也没啥问题。所以最终我觉得,尽量保证tomcat版本大于jdk吧,总是安稳一些吧。

其次,我一开始以为我的maven项目用的jdk是1.9的,因为我电脑上装的jdk是1.9的,最终发现不是,maven是个项目管理工具,如果不告诉它代码要使用什么样的jdk版本编译,它就会用编译插件maven-compiler-plugin默认的jdk版本来处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。例如代码中要是使用上了Java 8的新特性,比如函数式编程,但是maven在编译的时候使用的是Java 7,那这一段代码是完全不可能编译成.class文件的。为了避免出现这种情况,在构建maven项目的时候,我习惯性第一步就是配置maven-compiler-plugin插件,指定项目源码的 jdk 版本,编译后的 jdk 版本,以及编码方式。
从 maven-compiler-plugin 3.8.0 之后,默认JDK 版本就由 1.5 改为 1.6 了。但是这仍然跟不上 JDK 的更新速度,目前大多数系统都在使用 JDK 1.8。Apache Maven Project 对 maven-compiler-plugin中compiler:compile有如下关于jdk版本变更的描述:
在这里插入图片描述
所以我之前默认的应该是1.6的,如何修改maven项目的jdk版本呢。
和设置tomcat7插件类似,也是在plugins中加入:

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <target>1.8</target>
                        <source>1.8</source>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>

即可更改jdk版本,当然这个修改只能更改本项目的jdk版本,而不是全局的。

如果是全局的修改,则是在setting.xml文件中的profiles元素下添加如下:

<profile>
	<id>jdk17</id>
	<activation>
		<activeByDefault>true</activeByDefault>
		<jdk>1.7</jdk>
	</activation>
	<properties>
		<maven.compiler.source>1.7</maven.compiler.source>
		<maven.compiler.target>1.7</maven.compiler.target>
		<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
	</properties>	
</profile>

参考资料

https://www.cnblogs.com/east7/p/13363069.html
https://blog.csdn.net/kqygww/article/details/12922135

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值