Maven多模块如何打包本地的jar包到war中

Maven多模块如何打包本地的jar包到war中

现如今,使用spring-boot和maven开发项目已经越来越普遍了,同时大多时候我们也是通过maven以及公共的repo和私服repo来管理自己的jar包依赖,但难免会碰到有些jar包需要放在本地,通过本地jar包的形式加载到自己的项目里。
本文主要阐述这种情况下怎么处理,项目中虽然使用的spring-boot,但是还是打包成了war包,项目结构如下:

project-A  //父工程
  module-a //启动类模块同时也是打包模块
  	module-a-pom.xml //packaging为war
  module-b //需要使用本地lib的模块
  	module-b-pom.xml
 pom.xml //packaging为pom
 lib //存放本地lib的目录

为了能够在部署war包后项目能够正常运行,需要做下面几件事:

如何在需要的模块中引用本地的包?

这里也即如何在 module-b 中引用lib目录中的jar包,如下配置

<dependency>
    <groupId>your.package.groupId</groupId>
    <artifactId>your.package.artifactId</artifactId>
    <version>your.package.artifactId</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/../libs/your-package.jar</systemPath>
</dependency>

上述中,前三个和我们正常的maven配置一样,这需要注意的就是配置了,需要使用绝对路径,指向你的本地jar包路径, p r o j e c t . b a s e d i r 表示项目根目录,但是这里的根目录并不是我所想的父模块的目录(即 p r o j e c t − A 目录路径)而是该 p o m 所在的模块的目录(即 m o d u l e − b 目录), {project.basedir}表示项目根目录,但是这里的根目录并不是我所想的父模块的目录(即project-A目录路径)而是该pom所在的模块的目录(即module-b目录), project.basedir表示项目根目录,但是这里的根目录并不是我所想的父模块的目录(即projectA目录路径)而是该pom所在的模块的目录(即moduleb目录),{project.basedir}代表的应该是本pom所在的模块对应的目录,所以我们需要使用 …/ 来找到对应的jar包。

如何将本地的jar包打包进项目的war包?

按照1中配置完后本地调试没有问题,发布到服务器之后报错,发现本地的lib并没有打包到war包中 WEB-INF/lib目录里,我们还需要在启动模块进行配置,这里即 module-a模块,如下配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
            <!-- 下面是为了将本地jar包打入WEB-INF/lib下而增加的配置-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <!-- 指向的是包含所有要用jar包的目录 -->
                            <directory>${project.basedir}/../lib</directory>
                            <!-- 编译后要把这些jar包复制到的位置 -->
                            <targetPath>WEB-INF/lib</targetPath>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

这里需要配置两个地方:

  1. spring-boot-maven-plugin插件配置true
  2. 增加 maven-war-plugin插件,这里的也需要按照1中方法正确指向你的本地jar包所在的目录

至此,便可以在spring-boot的war包中将本地的jar包打包进去从而顺利发布。
调试了一天,最后参照了知乎的一篇文章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KevinPan_1992

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值