使用maven的systemPath本地引用jar包打包会丢失jar问题

使用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/floow/blog-demo demo15

支付宝搜索:344355 领取随机红包

如果文章对您有帮助,欢迎给作者打赏