多模块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之后才找到了这个子模块的打包命令,革命尚未成功呐。

相关推荐
小扳5 分钟前
微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用
java·运维·分布式·后端·spring·微服务·架构
ᝰꫝꪉꪯꫀ36111 分钟前
JavaWeb——SpringBoot原理
java·开发语言·后端·springboot
LLLibra14612 分钟前
如何使用Postman优雅地进行接口自动加密与解密
后端
HaiFan.15 分钟前
Spring日志
java·spring boot
Hello Dam31 分钟前
基于 Spring Boot 实现图片的服务器本地存储及前端回显
服务器·前端·spring boot
LightOfNight32 分钟前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
刽子手发艺41 分钟前
云服务器部署springboot项目、云服务器配置JDK、Tomcat
java·后端·部署
北漂编程小王子44 分钟前
maven <scope>import</scope>配置作用
java·maven·maven import
White graces1 小时前
Spring MVC练习(前后端分离开发实例)
java·开发语言·前端·后端·spring·java-ee·mvc
kingwebo'sZone4 小时前
ASP.net WebAPI 上传图片实例(保存显示随机文件名)
后端·asp.net