问题描述
创建一个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