SpringBoot maven多module 打包

本文介绍如何在Spring Boot项目中实现多模块开发并成功打包。通过调整父POM及各子模块的POM配置,引入spring-boot-maven-plugin插件,并确保含有主类的模块正确配置。

最近一直在弄 springboot项目,但是只能是 单个模块开发,一直想做成多模块开发,但是 使用maven打包,一直打包不成功,总是提示: 找不到主类 。下面总结一下 多module 打包,做一个记录。
1.首先通过 ieda springboot 插件,创建springBoot 项目
完成后,将 除 pom.xml 外的全部文件/文件夹删掉。

就是这种结构:
父包
父pom 文件是 这样的:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-father</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-father</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在新建 两个module
通过maven 方式构建
在这里插入图片描述
直接点 next 新建module ,创建三个 module
common db web
common,db,web
common 的 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo-father</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>common</artifactId>
</project>

db 的 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo-father</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>db</artifactId>
</project>

web 的pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo-father</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>web</artifactId>
</project>

要是这会 就开始 打包,会提示 找不到 主类

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.6.RELEASE:repackage (repackage) 
on project common: Execution repackage of goal
 org.springframework.boot:spring-boot-maven-plugin:2.1.6.RELEASE:
 repackage failed: Unable to find main class -> [Help 1]

原因:所有的 module 都是集成了父的pom 在父pom 中,有springboot maven的 打包配置 如下,

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

但是 common module 中并没有springBoot 的启动类
所以在 maven 打包完成后,springboot 会进行二次打包,打包成可执行的jar 因此才会报错。

下面 就开始 改一下 所有的pom 结构

一、父pom的修改

1. 将父pom 的 中 spring-boot-maven-plugin 删除 
2. 将 父pom 的 打包方式 <packing >节点 设置成 pom `<packaging>pom</packaging>`

二、module 的 pom 修改

1.将所有module 的pom 中 打包方式 节点 设置成 jar<packaging>jar</packaging> 即 打jar包
2.将 spring-boot-mvave-plugin 的配置(父pom 中删除的build 节点) 添加到 需要打成可执行jar 的 module 我方在 web 中
3.将 db 和common的 引用到web pom 中

三、在web 中手动新建 springBoot的启动类

在这里插入图片描述

package com.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebApplication {
    public static  void main(String[] args){
        System.out.println("SpringBoot 启动了");
        SpringApplication.run(WebApplication.class,args);
    }
}

致此,整个结构更改结束,文件结构如下
在这里插入图片描述
父 pom :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>common</module>
        <module>web</module>
        <module>db</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-father</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-father</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
        </plugins>
    </build>
</project>

common pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo-father</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>common</artifactId>
</project>

db pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo-father</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>db</artifactId>
</project>

web pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo-father</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>web</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>db</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

可 依次打包 (install) 命令

先打 common 和 db 再打 web

注:若打包web时 提示 无法找到父包,则需将父包也进行 install

启动一下 web .jar
java -jar web.jar
在这里插入图片描述

到此 打包完成 ,如有问题,欢迎指正。

在 Spring Boot 模块项目中,使用 Maven 进行打包需要合理配置父模块与子模块的依赖关系,同时确保构建流程的正确性。以下是打包方法和关键步骤: ### 1. 父模块配置 父模块(Parent Module)的主要作用是聚合子模块,并统一管理依赖版本和插件配置。父模块的 `pom.xml` 文件中需要定义 `<modules>` 来包含所有子模块,这样在执行 Maven 命令时会按照模块依赖顺序进行处理[^3]。 ```xml <modules> <module>user-pojo</module> <module>user-dao</module> <module>user-service</module> <module>user-web</module> </modules> ``` ### 2. 子模块依赖配置 子模块之间可能存在依赖关系,例如 `user-service` 依赖 `user-dao`,`user-web` 依赖 `user-service` 和 `user-pojo`。在子模块的 `pom.xml` 中需正确声明 `<dependencies>`,确保模块之间的依赖关系清晰明确[^1]。 例如,在 `user-web` 模块中的 `pom.xml`: ```xml <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>user-service</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>user-pojo</artifactId> <version>1.0.0</version> </dependency> </dependencies> ``` ### 3. 配置可执行 JAR 包 对于包含启动类的模块(如 `user-web`),需要配置 `spring-boot-maven-plugin` 插件以生成可执行的 JAR 包。该插件会将所有依赖打包进最终的 JAR 文件中,并指定主类以支持直接运行[^4]。 ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <mainClass>com.example.userweb.UserWebApplication</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` ### 4. 执行打包命令 在项目根目录(父模块)下执行 Maven 打包命令,确保所有模块按依赖顺序正确构建: ```bash mvn clean package ``` 该命令会依次执行以下操作: - 清理目标目录(`clean`) - 编译源代码(`compile`) - 执行单元测试(`test`) - 打包生成 JAR/WAR 文件(`package`)[^5] 如果希望跳过测试,可以加上 `-DskipTests` 参数: ```bash mvn clean package -DskipTests ``` ### 5. 查看打包结果 打包完成后,可在各子模块的 `target/` 目录下找到生成的 JAR 文件。其中,启动类模块(如 `user-web`)生成的 JAR 文件可以直接运行: ```bash java -jar user-web-1.0.0.jar ``` ### 6. 模块打包常见问题 - **依赖未正确安装**:若子模块依赖的模块未先执行 `mvn install`,则可能导致构建失败。通过父模块统一执行打包命令可以避免此类问题[^3]。 - **启动类未正确配置**:确保 `spring-boot-maven-plugin` 中的 `<mainClass>` 配置正确,否则生成的 JAR 无法运行[^4]。 - **依赖冲突**:使用 `<dependencyManagement>` 在父模块中统一管理依赖版本,有助于避免版本冲突问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值