这个问题忙了我一天多的时间,因为太棘手了, 所以记录下来,防止忘记;
问题是这样的,因为项目中用到了自定义的jar包,也就是远程仓库里没有的jar,所以想要引用就必须自己手动添加进去,在idea中运行是没问题的,但是打包到测试环境后发现经常报错
java.lang.NoClassDefFoundError 和 ClassNotFoundException 异常,经过一查找才发现是因为打包的时候依赖jar包没打进去;
一开始是在项目中导入了本地的jar包。发现没用
网上找到问题说是因为scope指定了system域是系统范围使用的,在打包时不会将这个空间的包打进lib目录下;
然后也在项目中手动添加了这个依赖jar包;发现还是不行
但是不管是mvn install 还是mvn package 打包后,在war包里的 WEB-INF/lib 目录下都没看到这个jar包
;
根据这个问题,网上尝试了很多方法都没用,最后自己在一个网站上找到了方法
解决方案
1、在pom.xml文件的 build 标签下面加入以下代码即可
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.6</version>
- <configuration>
- <webResources>
- <resource>
- <!-- 源jar包所在位置, ${project.basedir} 表示当前目录的路径 -->
- <directory>${project.basedir}/lib</directory>
-
- <!-- 打包后的目标文件夹 ,也就是你打包后的war包或者jar包的目录 -->
- <targetPath>WEB-INF/lib</targetPath>
- <filtering>false</filtering>
- <includes>
- <!-- 把所有的jar包都打进去 -->
- <include>**/*.jar</include>
- </includes>
- </resource>
- </webResources>
- </configuration>
加好后的代码如下