笔者在给Springboot工程打包war时,尝试多种本地jar引入方法,均未奏效并明确引入方法有验证过(验证的本地jar仅一个,并且groupId和artifactId不与其它dependency中重复。这点很重要,也是本文的重点,笔者错误原因就在这里)。
本文基于小伙伴已首次本地代码(不含引入本地jar包)已经编译生成.war文件并上传服务器tomcat webapp目录后正常运行。不再对本地代码打war包上传服务器多做赘述,请自行百度学习验证通过。
笔者工程中应用某硬件厂商的jar包,估计硬件厂商对于软件部署还停留在早期eclipse的jar包引入方式开发,故多个jar引入时没有出错。而maven的dependency中对于重复的groupId和artifactId仅引入最后一次的标签中的jar。例如,
<dependency>
<groupId>com.lib.bx6</groupId>
<artifactId>com.lib.bx6</artifactId>
<version>0.5.1-SNAPSHOT6</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/bx06.message-0.6.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>com.lib.bx6</groupId>
<artifactId>com.lib.bx6</artifactId>
<version>0.5.1-SNAPSHOT6</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/bx06-0.6.5-SNAPSHOT.jar</systemPath>
</dependency>
在idea IntelliJ本地运行时,只要jar有在File - Project Structure - Library中有添加即可正常运行。但是,打war包要引入这两个jar时,对于bx06.messagebx06.message-0.6.0-SNAPSHOT.jar这个jar的内容就被覆盖了,报错的内容时这个包里的类不存在,或Symbol未声明等。仅有最后一次引入的bx06-0.6.5-SNAPSHOT.jar生效。
解决方法:
笔者首先查systemPath想多定义jar。失败,如果有小伙伴解决欢迎留言。
其次,改version,例如0.5.1-SNAPSHOT6-2。失败,依旧只有最后一个生效。
最后,改artifactId,例如com.lib.bx6.2。成功。借此给大家参考。
(引入本地jar,相同的groupId和artifactId会导致dependency覆盖,仅最后一个生效)