美文网首页Spring Boot 核心技术
SpringBoot创建多Module项目以及问题排查

SpringBoot创建多Module项目以及问题排查

作者: LssTechnology | 来源:发表于2019-02-16 16:12 被阅读0次
    前言
           Maven多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml。它们之间通过继承和聚合(也称作多模块)相互关联。多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。
    1、父模块创建

    父模块创建跟平时创建springboot项目一样,File->New->Project后,选择Spring Initializr,然后一直next创建完项目即可。

    2、字模块创建
    1.png

    在创建好的learn工程名上,点击右键,选择New–>Module,进入New Module页面,其他参数可自己选择,然后一直next创建成功。
    上图展示的是我已经创建好了common、manyDataSource、test三个模块。


    2.png

    创建好后目录入上图
    我们把上图中的无用的文件及文件夹删掉,包括父模块的mvnw、mvnw.cmd文件、mvn文件夹、src目录,因为此处的父模块只做依赖管理,不需要编写代码。

    此时多模块项目已经创建完毕
    3、多模块项目配置

    父pom是为了抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置。

    3.1、父模块的打包类型

    多模块项目中,父模块打包类型必须是pom,同时以给出所有的子模块,其中每个module,都是另外一个maven项目。
    我们的项目中目前一共有三个子模块,common、manyDataSource、test。后续新增的子模块也必须加到父pom的modules中。

    3.2、继承设置

    继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承,想深入了解的同学可自行搜索学习

    3.3、使用dependencyManagement管理依赖版本号

    一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

    3.4、使用properties控制依赖包的版本号,便于版本维护

    在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可。

    4、多模块项目打包遇到的问题
    4.1、repackage failed: Unable to find main class

    在Terminal中执行
    mvn clean package

    4.png
    这是因为父模块中没有了主程序入口,
    4.png
    将父pom中的plugin中的内容注释掉即可解决
    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
    </build>
    
    4.2、子模块中如果加入了启动类,如下图
    3.png

    此时需要在对应的子模块pom中添加

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

    否则打完包用
    java -jar xxx.jar
    时会提示xxx.jar中没有主清单属性

    如果多个子模块都需要启动入口,则都需要加入上述配置
    这是我在使用SpringBoot创建多Module项目时遇到的问题和解决办法,希望共同进步。

    相关文章

      网友评论

        本文标题:SpringBoot创建多Module项目以及问题排查

        本文链接:https://www.haomeiwen.com/subject/bmzbeqtx.html