多模块Springboot项目maven单独打包子模块

背景介绍

最近接手一个项目代号XXL,是一个多模块的Springboot项目,在解决了线上的bug之后,想单独给子模块打包上线部署,问题来了。如果整个工程一起mvn -X -DskipTests clean package,打包出来的XXL-web.jar是可以正常启动的,但是单独子模块执行打包的时候启动却缺少依赖。

项目结构如下:

我需要打包的子模块就是XXL-web模块。

问题描述

XXL-web模块是后端的接口模块,供前端调用,此模块引用了usr模块、database模块等,然后web引用了这些模块,如database模块中引用了jpa的包,所以XXL-web模块就没有引用jpa相关的包和数据库连接池相关的包。

当我整个项目打包的时候,项目正常启动。当我只使用子模块用mvn -X -DskipTests clean package打包的时候,启动却缺少了jpa的依赖和数据库连接池相关的依赖。

接下来我把父pom和XXL-web模块的pom的打包插件贴出来

复制代码
<!--父pom-->
<build>
        <finalName>${project.name}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                    <configuration>
                        <includeSystemScope>true</includeSystemScope>
                        <finalName>${project.build.finalName}</finalName>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>

<!--XXL-web的pom-->
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                    <mainClass>com.***.***.WebApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

解决方案一:

缺少的包全揉进XXL-web模块,显然这种方式很智障。

解决方案二:

进入到XXL-web目录下执行子模块打包命令

java 复制代码
mvn install -pl my-submodule(XXL-web) -am

-pl 参数用于指定要构建的子模块,可以通过指定子模块的 artifactId 或者模块路径来指定。在命令中使用 -pl my-submodule 表示只构建名为 my-submodule 的子模块。

-am 参数用于自动构建依赖的模块。如果当前构建的模块依赖于其他模块,使用 -am 参数可以让 Maven 自动构建这些依赖的模块。在命令中使用 -am 表示构建所有依赖的模块。

因此,mvn install -pl my-submodule -am 命令表示构建当前项目以及依赖的模块,并且只构建名为 my-submodule 的子模块。

总结

其实造成我走歪路的原因就是maven指令的不熟悉,在疯狂google之后才找到了这个子模块的打包命令,革命尚未成功呐。

相关推荐
学长毕设2 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw3 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号4 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
努力的小雨4 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
excel5 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记6 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序6 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
属于自己的天空6 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端
Tokenfree6 小时前
给大模型调用加一个熔断器:60 行代码,三个阈值
后端
Jason_chen6 小时前
Linux 进程调度器深入解析与实时性优化指南(基于 Linux 5.10+)
后端