springboot引入第三方本地jar包遇到的坑和解决方案

背景

接到一个项目需求,需要对接第三方的业务方,通过调他们的sdk,调用他们的接口。sdk是以一个jar包的形式提供的,并没有上传到maven中央仓库,没办法直接通过maven的方式引入

思路

遇到这种场景,通常有2种方法

1.把包给运维,帮忙发到公司内部的私有仓库,然后通过maven的方式引入

2.把包放到要引入的项目里,pom里直接引用项目里的jar包

第一种方式需要找运维沟通,如果可以,按照正常引用maven包的方式就行,所以主要说第二种方式

第二种方式首先采取的是网上最多的方式

1.在对应模块的src下新建个lib文件夹(目录可以自己定),将jar包复制进来

2.对应模块的pom文件加入依赖:

<dependency>
    <groupId>sdk</groupId>
    <artifactId>test</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/test.jar</systemPath>
</dependency>

groupId,artifactId,version都可以自己定,path为jar包复制的路径,pom.basedir和project.basedir一样,都是相对路径

到这一步,本地已经可以正常引到包了,也能正常maven打包,编译,运行代码,自测,本来以为到这就万事大吉了,发到测试环境后,maven打包部署,项目启动都没问题,但是当访问到对应的方法时,就会报错:java.lang.NoClassDefFoundError

继续解决:

经过百度搜索,发现如果要发到服务器上的,还需要在对于的pom文件里引入spring-boot-maven-plugin插件,并且includeSystemScope属性配置为true(网上基本上都是这个答案,也有很多人是通过这种方案解决的),如下:

<build>
	<plugins>
		<plugin>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-maven-plugin</artifactId>
		    <configuration>
		        <includeSystemScope>true</includeSystemScope>
		    </configuration>
		</plugin>
	</plugins>
</build>

于是就尝试了一下,结果发现还是不行,本地环境可以,到测试环境就不行

因为编辑和maven打包都没问题,调用的时候才会报错,怀疑测试环境没把这个jar包打进去,再进一步怀疑和jenkins部署,每次部署项目后会创建新的容器有关,于是换了一种方式:

1.使用maven-install-plugin插件,phase表示每次clean的时候会把对应的jar包部署到容器的本地仓库,参数和上面的一样

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <id>install-external</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${project.basedir}/src/lib/test-0.1.9.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>sdk</groupId>
                        <artifactId>test</artifactId>
                        <version>1.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2.引入对应的pom文件信息

<dependency>
    <groupId>sdk</groupId>
    <artifactId>test</artifactId>
    <version>1.0.0</version>
</dependency>

再次发到测试环境,重新打包部署就好了,可以看到在测试环境打包的时候,将第三方的jar包打包到了本地仓库

另外:如果采用方式1,直接把包发到公司私有仓库,执行语句:

mvn deploy:deploy-file --settings /Users/zcy/tools/apache-maven-3.6.3/conf/zcy_settings.xml  -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=0.1.9 -Dpackaging=jar -Dfile=${jar包的路径}  -Durl=${公司仓库的url} -DrepositoryId=dev/releases

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值