前言
在项目开发中,项目用maven管理,是一个maven项目。
一般情况下jar包都可以使用pom.xml来配置管理,但也有一些时候,我们项目中使用了一个内部jar文件,但是这个文件我们又没有开放到maven库中。
我们会将文件放到我们项目WEB-INF/lib中。如果是springboot项目放到resources/lib。
如果我们不对pom.xml进行特殊配置的话,maven打包是不会自动去引用和编译lib中的jar文件的,所以需要我们修改下pom.xml文件。导致的类找不到的问题。如下图:
解决方式
方法一:Maven提供了scope为system的依赖,我们可以在maven中进行如下配置
第一步.配置资源引用
<dependency>
<groupId>com.jd.cps</groupId>
<artifactId>jd-cps-client</artifactId>
<version>2.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/jd-cps-client-2.2.jar</systemPath>
</dependency>
第二步.目前第二步有三种方式
方式1:在spring-boot-maven-plugin插件中配置<includeSystemScope>true</includeSystemScope>(即包含scope未system的依赖)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<includeSystemScope>true</includeSystemScope><!--主要是这个配置-->
<mainClass>com.xy.im.admin.xxxApplication</mainClass>
<layout>ZIP</layout>
<!--使用外部配置文件,jar包里没有资源文件-->
<addResources>true</addResources>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
方式二:在build标签中添加以下代码,可以把指定的资源放到特定的位置
<resources>
<resource>
<directory>lib</directory>//需要的资源位置
<targetPath>/BOOT-INF/lib/</targetPath>//需要的资源最终要放到的位置
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
这种方式在jar的个数较少时非常方便,但是一但jar多时就会显得很麻烦了。所以最好是能方便配置整个lib目录,让该目录下所有jar包都参与编译,方法二便可以解决这种需求。
关于maven中pom的属性可参考:https://blog.csdn.net/moonpure/article/details/82380456