问题
之前在用maven做web项目的时候遇到过一个问题,有些依赖明明在pom文件里面声明过了,项目结构的依赖中也有了,但是运行项目时依然会出现ClassNotFoundException异常,就像下面这样
原因
可以先看一下web资源目录是这样的
然后在项目结构中查看构件,是这样的
最后在输出目录下的结构是这样的
所以问题就出在这里:
当我们在Tomcat上跑程序的时候,我们是将项目的编译输出结果(也就是上图target下的内容)发布到Tomcat服务器
服务器会去你的编译结果里找项目中用到的工具类,输出目录里没有Tomcat就会报错,
而按平常的操作(配置web资源目录后直接添加构建)idea是不会把maven的依赖添加到输出目录中的,所以我们还需要将用到的jar包也放到编译结果当中,
不像我们平常写的在idea控制台运行的程序,那个是不用将工具类jar包放在输出目录里的,因为idea会去项目依赖中找jar包
解决方案
那么,解决这个问题,两个方案:
1. 在WEB-INF文件夹下添加一个lib文件夹,然后手动将项目需要用到的jar包都添加进去,然后重新编译一下,这也是为什么初学javaweb的时候老师通常会让你这么做的原因。但是我们既然使用maven做的项目这样就显得太麻烦了,所以我推荐用下面这个方案
2.
打开项目结构->点击构件->右键右侧的可用元素,点击“置于Output Root”,这样idea会自动的在WEB-INF下创建一个lib文件夹然后把这些jar包都放进去
最后在重新构建一下项目就可以了