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

相关推荐
墨家巨子@俏如来几秒前
一.干货干货!!!SpringAI入门到实战-小试牛刀
后端·springai·ai人工智能
ahhhhaaaa-1 分钟前
【AI图像生成网站&Golang】部署图像生成服务(阿里云ACK+GPU实例)
开发语言·数据仓库·人工智能·后端·阿里云·golang
码不停蹄的玄黓6 分钟前
通关JUC:Java并发工具包从入门到精通 | 深度源码解析
java·jvm·spring boot·spring·spring cloud
年老体衰按不动键盘25 分钟前
idea中导入maven项目的方法
java·maven·intellij-idea
jdyzzy35 分钟前
从0到1做一个“任务管理系统”:Spring Boot + Vue 实战教程(含源码)
vue.js·spring boot·后端
愚农搬码1 小时前
LangChain 调用不同类型的多MCP服务
人工智能·后端
我会冲击波1 小时前
推荐一款让代码命名变得轻松高效的idea插件
后端
楽码1 小时前
安装和编写grpc协议文件
服务器·后端·grpc
码农之王1 小时前
(二)TypeScript前置编译配置
前端·后端·typescript
一眼万年041 小时前
Kafka LogManager 深度解析
后端·kafka