接使用maven的systemPath本地引用oracle的jdbc驱动包,在本地直接使用idea开发运行不会有什么问题,oracle的jdbc驱动包能够正常引用,但是我们使用maven打包之后就出问题了,我们使用压缩软件打开打包出的jar包可以发现,使用systemPath引入的jar包并没有复制到打包出来的jar包。
怎么解决这个问题呢?可以在maven的pom文件的build下增加如下代码即可解决。(注意:该方法在application.yml文件中如使用到@env@类似这种变量替换时,最常见的就是环境切换会有问题,会导致@env@变量不会替换成对应的dev或者prod或者其他值,发现有更简单的办法解决这个问题,解决办法见文末。)
<resources> <resource> <directory>${basedir}/lib</directory> <targetPath>BOOT-INF/lib/</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <targetPath>BOOT-INF/classes/</targetPath> </resource> </resources>
其中${basedir}/lib是我们项目中使用systemPath引入的jar包的文件位置,${basedir}是项目自身位置。到这里我们的打包也可以正常使用了。
完整的pom文件中build的代码为:
<build>
<resources>
<resource>
<directory>${basedir}/lib</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<targetPath>BOOT-INF/classes/</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我们使用压缩软件打开打包后的jar包看看我们使用systemPath引入的jar包在不在。
==============
新的解决办法,可以解决上述红字问题,还更简单。只需要给pom中的spring-boot-maven-plugin插件添加一个配置即可在打包的时候引入scope为system的jar包,pom中的代码如下。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build>
完整的代码参考:https://gitee.com/lqccan/blog-demo demo15