首要原因:项目发布后对应依赖的包没有发布在web-inf下的lib里
根本原因:Maven创建的普通项目而不是web项目,缺少插件
解决办法1:这是由于pom.xml中下载的jar包未被部署。我们先ctrl+shift+alt+s打开Project Structure窗口,选择Artifacts,选择要打包部署的项目,在Output Layout –> Web-INF查看是否有lib目录,如果右边Available Elements窗口还显示有jar包,说明这些jar包未添加,则应右击选择Put into Output Root,这样就OK啦~
解决方法2:
项目中的jar包一部分是基于pom文件依赖,一部分是用BuildPath放入WEB-INF/lib目录下,最后在使用maven打包的时候,发现无法把WEB-INF/lib下的jar包打到war包里面,导致引入WEB-INF/lib目录中jar的类无法编译而出错。
解决方式:
在pom文件里面加入如下maven插件:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<!-- <extdirs>{basedir}/WebRoot/WEB-INF/lib</extdirs> -->
<extdirs>{basedir}/src/main/webapp/WEB-INF/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
加入这段代码之后,重新使用maven打包编译就可以把WEB-INF/lib目录下的jar包和pom文件依赖的jar包都打进war包里面了
自动添加classpath
普通Java Web项目为什么lib包要放在WEB-INF下
首先一个项目要编译好之后才能部署到Tomcat中运行。
Tomcat运行时如何找编译好的.class文件呢,其实Tomcat下的web项目有两个预置的classpath(就是能找到.class文件的入口),
这两个预置的classpath是WEB-INF/classes与WEF-INF/lib,
其中我们src下的源文件经过了编译之后放在WEB-INF/classes目录下,
而lib包在编译前需要放在WEB-INF下编译后才能出现在WEF-INF/lib目录下
所以说lib包下如果没有放在WEB-INF下编译后就不会出现在WEB-INF/lib下,从而不会被Tomcat找到。
Comments | NOTHING