本来正在做一个springmvc的入门案例,不料出现了一系列大大小小的问题,故在此记录。
首先就是导入相关依赖坐标这里,servlet依赖的坐标一定要指定scope为provided,否则会产生冲突。
然后还要注意配置tomcat7-maven-plugin时:
一开始我没有考虑我的tomcat是9的版本,然后肯定是无法配置成功的。出现了COMPILE FAILURE:
不再支持源选项 5。请使用 7 或更高版本。
看了网上别人的一些做法,我总结如下,我都配置了下面这些文件:
【1】Tomcat的\conf\tomcat-users.xml
加入以下内容:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="" password="" roles="manager-gui,manager-script,manager-jmx,manager-status" />
【2】Maven的\conf\settings.xml
加入如下内容:
<server>
<id>tomcat9</id>
<username></username>
<password></password>
</server>
【3】最后加入pom配置中
<configuration>
<server>tomcat9</server>
<update>true</update>
<port>8080</port>
<path>/</path>
</configuration>
或:
<configuration>
<server>tomcat9</server>
<update>true</update>
</configuration>
可能【1】【2】都配置了还是没用,可以试下【4】,可能是jdk版本的问题,日志还提示了encoding的问题(我是jdk15的版本)
【4】仅本项目:pom中加入properties标签
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>15</java.version>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
题外话:每一个maven项目创建时,pom文件都会自动带properties标签,好像是我改pom的时候不小心删掉了...(omg自己害死自己...)
【4】一劳永逸型:Maven的\conf\settings.xml(maven全局都是这个版本的jdk了,一改全改)
<profile>
<id>jdk-15</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>15</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
</profile>
【另】我推测还可能有别的奇奇怪怪的原因,比如下面这个:
Unrecognised tag: 'mirrors' (position: START_TAG seen ...</mirror>\r\n --> \r\n\r\n <mirrors>.
这个就是Maven仓库的配置文件没写好的原因,这个明明就是标签对齐等格式问题。重新配置好后,进行clean再重新compile。
然后又出现了下面这个问题:
NoSuchMethodError: 'void javax.servlet.http.HttpServletResponse.setContentLengthLong(long)'
因为之前一直都用的最新的spring-Xxx依赖,现在最新的版本基本5.3.20起步,然后网上都说是因为依赖版本过高,于是改成5.3.Xx以下的:
可是又出现了新问题,Skipping non-war project,明明选中的就是这个web项目怎么会找不到project部署还成功build呢?
原来需要在Maven项目的pom中配置打包方式,对于web项目来说,要打包为war才能被部署成功。
然后基本就解决了全部遇到的问题,tomcat7:run启动项目,当日志最后提示如下信息时,不是卡住了而是成功启动并正在运行中的意思。
Starting ProtocolHandler ["http-bio-8080"]