SpringMVC多模块间子模块引入本地jar ClassNotFoundException问题记录
项目结构如下:
api模块引用service-core模块,api模块打包为war,service-core打包为jar
其中service-core模块引入了一个本地jar
问题描述:
启动api引入jar包后编译能通过,但在api中调用就报ClassNotFoundException
问题原因:
出现这种问题就说明你引入的jar包在api war包的WEB-INF\lib下不存在。编译的时候不从WEB-INF\lib目录下寻找类,是从classpath下寻找的,也就是说你引入的jar包只是存在于classpath下。
问题解决:
service-core的pom配置
<dependency>
<groupId>sdk</groupId>
<artifactId>sdk</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sdk.jar</systemPath>
</dependency>
api的pom配置
<!--使用maven-war-plugin插件在编译时指定第三方jar包目录并引入-->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<webResources>
<resource>
<!-- 引入本模块下的jar/单模块项目的jar -->
<!--<directory>${basedir}/src/main/resources/lib</directory>-->
<!-- 引入多模块项目其它模块下的jar -->
<directory>../service-core/lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>