maven项目发布到tomcat中,classes目录为空的问题

这个bug经常发生在把maven项目发布到tomcat的时候,比较坑。

 

1.问题情景

我把spring mvc项目发布到tomcat中,结果tomcat启动时报错无法找到某个实体类文件。所以我就到tomcat的webapps目录下去查看项目,发现不但是这个文件找不到,而是整个classes文件夹下空空如也,只有目录和一些配置文件,class文件一个都没有。

我当时就想,肯定是eclipse发布过程有问题咯,整个项目发布到tomcat的时候有问题,所有的java文件都没有编译成class文件发布到对应的文件目录下。

既然是发布过程的错误,那么我就手工删掉webapps下的目录,然后重新在eclipse中进行发布。结果这次启动tomcat的时候爆出了这样的错误:

我又去看了下webapps目录,发现这次是整个项目完全没有部署到webapps中!

因为之前这个项目是部署成功过的,用了很久都没有什么错误,所以我现在完全没有头绪是哪里出了问题。

2.尝试解决

因为项目本身是没有报错的,可以认为项目中没有错误,是不是eclipse自身的bug?所以我重启了eclipse,重新进行部署,得到的还是一模一样的错误。

会不会是当前部署的项目和tomcat中其他项目互相冲突,无法启动?所以我把整个webapps删了个干净,重新进行部署,得到的还是一模一样的错误。

有可能是当前项目的构建有问题,所以我clean了项目,之后又maven clean了项目,重新进行部署,得到的还是一模一样的错误。

之后我重新导入了这个项目,又参考了一遍

http://www.xie4ever.com/2016/06/23/spring-mvc-%E5%BC%95%E5%85%A5%E6%96%B0%E7%9A%84ssm%E9%A1%B9%E7%9B%AE%E7%9A%84%E5%B8%B8%E8%A7%81%E9%85%8D%E7%BD%AE/

进行检查,发现也是没有什么作用。

3.解决方法

折腾了很久之后我感觉很烦躁,所以随便尝试了一下eclipse的项目配置。结果发现了这样一个选项我并没有引入:

1

当时这个选项似乎是指定web项目的发布路径,赶紧勾选一下试试,结果这次就启动成功了。尝试访问接口,发现能够正常访问了。

4.问题原因

为了求证是不是这个选项发生了作用,所以我又把webapps下的项目删除了,然后去掉这个选项,再次进行项目的发布。果不其然,这次tomcat无法启动。

估计是这个选项决定了web项目的class文件的发布路径。如果不指定此选项,就不会发布到webapps路径下,导致tomcat无法启动。

试了几次之后,发现这个问题也会有不同的表现方式:

1.tomcat爆出大段错误,无法启动(和上面的报错信息相似)

2.tomcat报错某个类找不到,mybatis、spring什么的映射失败,tomcat无法启动。(因为该报错信息会提及mybatis和spring,所以会误导人去项目本身找原因。但是这样是没有用的,这个错误是部署的问题,而不是项目的问题。)

5.总结

这个问题我也遇到不少次了,每次都是稀里糊涂解决的,这次终于知道大概是怎么回事了…

如果以上方法解决不了,那就只能多尝试几次了。总有一次会成功的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注