Spring Boot 多模块项目创建与配置

1、前言

如果一个项目由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml。它们之间通过继承相互关联,都是maven管理的,那么这种就是多模块项目。

多模块适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。

比如有一些是common、utils等子模块提供公共服务。

2、创建多模块

2.1、创建父模块

左上角选择File->New->Project后,选择Spring Initializr,默认使用的Java版本是1.8
在这里插入图片描述

进入下一步,可以设置项目的一些基本信息,过程省略,该填写的就填写

在这里插入图片描述

点击Next,进入下一个选择dependency的界面,作用是在pom中自动添加一些依赖,在项目初始化时就下载。这里我们不需要任何依赖。

创建完成后,删除src、target等目录,父模块只做依赖管理,不需要编写代码。

2.2、创建子模块

右键项目名,New->module

在这里插入图片描述

创建过程同上,依次创建file-common、file-fastdfs-client、file-obs-client、file-ap(入口)

删除父子模块中所有的mvnw、mvnw.cmd文件及.mvn文件夹

在这里插入图片描述

到此为止,简单的父模块和子模块创建完成。

3、多模块配置

3.1、父pom

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

父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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <!-- parent指明继承关系,给出被继承的父项目的具体信息-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.alex</groupId>
    <artifactId>file</artifactId>
    <version>1.0.0</version>
    <name>file-center</name>
    <description>file-service-java</description>
    <!--父模块打包类型必须为pom-->
    <packaging>pom</packaging>

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


    <dependencies>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- log -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

    <!--声明有几个子模块-->
    <modules>
        <module>file-fastdfs-client</module>
        <module>file-obs-client</module>
        <module>file-api</module>
        <module>file-common</module>
    </modules>
    
     <!--build作用是打包,必须要写在需要打包的项目里。这里的父模块不需要打包运行,所以删掉。-->
    <!--    <build>-->
    <!--        <plugins>-->
    <!--            <plugin>-->
    <!--                <groupId>org.apache.maven.plugins</groupId>-->
    <!--                <artifactId>maven-compiler-plugin</artifactId>-->
    <!--                <version>3.1</version>-->
    <!--                <configuration>-->
    <!--                    <source>${java.version}</source>-->
    <!--                    <target>${java.version}</target>-->
    <!--                </configuration>-->
    <!--            </plugin>-->
    <!--            <plugin>-->
    <!--                <groupId>org.apache.maven.plugins</groupId>-->
    <!--                <artifactId>maven-surefire-plugin</artifactId>-->
    <!--                <version>2.19.1</version>-->
    <!--                <configuration>-->
    <!--                    <skipTests>true</skipTests>    &lt;!&ndash;默认关掉单元测试 &ndash;&gt;-->
    <!--                </configuration>-->
    <!--            </plugin>-->
    <!--        </plugins>-->
    <!--    </build>-->
    
</project>

有多少个子模块,就写多少个module。新增的子模块也必须加到父pom的modules中。

继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承。

3.2、子pom

子模块的parent要声明父模块;

file-fastdfs-client

pom.xml

不需要打包

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>fastdfs</artifactId>
    <version>1.0.0</version>
    <name>file-fastdfs-client</name>
    <description>fastdfs</description>

    <!--声明父模块-->
    <parent>
        <groupId>com.alex</groupId>
        <artifactId>file</artifactId>
        <version>1.0.0</version>
    </parent>

    <dependencies>
        <!-- fastdfs -->
        <dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.29-SNAPSHOT</version>
        </dependency>

        <!-- 子模块间相互引用 -->
        <dependency>
            <groupId>com.alex</groupId>
            <artifactId>obs</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
    </dependencies>


    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**.*</include>
                    <include>**/*.*</include>
                    <include>**/*/*.*</include>
                </includes>
            </resource>
        </resources>

    </build>

</project>

注意:子模块间相互引用方式

<!-- 子模块间相互引用 -->
<dependency>
    <groupId>com.alex</groupId>
    <artifactId>obs</artifactId>
    <version>1.0.0</version>
</dependency>

file-api

pom.xml

需要打包

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>file-web-api</artifactId>
    <version>1.0.0</version>
    <name>file-web-api</name>
    <description>web restful api</description>
    <packaging>jar</packaging>

    <!--声明父模块-->
    <parent>
        <groupId>com.alex</groupId>
        <artifactId>file</artifactId>
        <version>1.0.0</version>
    </parent>

    <profiles>
        <profile>
            <!-- 开发环境 -->
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <!-- 默认激活的环境 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <!-- 生产环境 -->
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>
    </profiles>

    <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>com.alex</groupId>
            <artifactId>fastdfs</artifactId>
            <version>1.0.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alex</groupId>
            <artifactId>common</artifactId>
            <version>1.0.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alex</groupId>
            <artifactId>obs</artifactId>
            <version>1.0.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
	<!-- 打包 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4、打包

打包一定是要在父pom下打包

在这里插入图片描述

5、文件目录

F:.
├─.idea
├─file-api
│  ├─.mvn
│  │  └─wrapper
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  │  └─com
│  │  │  │      └─alex
│  │  │  │          └─web
│  │  │  │              ├─base
│  │  │  │              ├─common
│  │  │  │              ├─config
│  │  │  │              └─controller
│  │  │  └─resources
│  │  │      ├─static
│  │  │      └─templates
│  │  └─test
│  │      └─java
│  │          └─com
│  │              └─alex
│  │                  └─web
|  └─target
├─file-common
│  ├─.mvn
│  │  └─wrapper
│  ├─src
│  │  └─main
│  │      ├─java
│  │      │  └─com
│  │      │      └─alex
│  │      │          └─common
│  │      │              └─utils
│  │      └─resources
|  └─target
├─file-fastdfs-client
│  ├─.mvn
│  │  └─wrapper
│  ├─src
│  │  ├─main
│  │  │  ├─java
│  │  │  │  └─com
│  │  │  │      └─alex
│  │  │  │          └─fastdfs
│  │  │  │              └─fastDFS
│  │  │  └─resources
│  │  │      ├─static
│  │  │      └─templates
│  │  └─test
│  │      └─java
│  │          └─com
│  │              └─alex
│  │                  └─fastdfs
|  └─target
└─file-obs-client
    ├─.mvn
    │  └─wrapper
    ├─src
    │  ├─main
    │  │  ├─java
    │  │  │  └─com
    │  │  │      └─alex
    │  │  │          └─obs
    │  │  │              ├─client
    │  │  │              └─utils
    │  │  └─resources
    │  └─test
    │      └─java
    │          └─com
    │              └─alex
    │                  └─obs
    └─target
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目示例基于spring boot 最新版本(2.1.9)实现,Spring BootSpring Cloud 学习示例,将持续更新…… 在基于Spring BootSpring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目需求的各种组件和积累各种解决方案。基于这样的背景下,我开源了本示例项目,方便大家快速上手Spring BootSpring Cloud 。 每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路,提高开发效率。 有需要写关于spring bootspring cloud示例,可以给我提issue哦 ## 项目介绍 spring boot demo 是一个Spring BootSpring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway(服务网关)、email(邮件发送)、cloud-alibaba(微服务全家桶)等模块 ### 开发环境 - JDK1.8 + - Maven 3.5 + - IntelliJ IDEA ULTIMATE 2019.1 - MySql 5.7 + ### Spring Boot 模块 模块名称|主要内容 ---|--- helloworld|[spring mvc,Spring Boot项目创建,单元测试](https://github.com/smltq/spring-boot-demo/blob/master/helloworld/HELP.md) web|[ssh项目,spring mvc,过滤器,拦截器,监视器,thymeleaf,lombok,jquery,bootstrap,mysql](https://github.com/smltq/spring-boot-demo/blob/master/web/HELP.md) aop|[aop,正则,前置通知,后置通知,环绕通知](https://github.com/smltq/spring-boot-demo/blob/master/aop/HELP.md) data-redis|[lettuce,redis,session redis,YAML配置,连接池,对象存储](https://github.com/smltq/spring-boot-demo/blob/master/data-redis/HELP.md) quartz|[Spring Scheduler,Quartz,分布式调度,集群,mysql持久化等](https://github.com/smltq/spring-boot-demo/blob/master/quartz/HELP.md) shiro|[授权、认证、加解密、统一异常处理](https://github.com/smltq/spring-boot-demo/blob/master/shiro/HELP.md) sign|[防篡改、防重放、文档自动生成](https://github.com/smltq/spring-boot-demo/blob/master/sign/HELP.md) security|[授权、认证、加解密、mybatis plus使用](https://github.com/smltq/spring-boot-demo/blob/master/security/HELP.md) mybatis-plus-generator|[基于mybatisplus代码自动生成](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-plus-generator) mybatis-plus-crud|[基于mybatisplus实现数据库增、册、改、查](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-plus-crud) encoder|[主流加密算法介绍、用户加密算法推荐](https://github.com/smltq/spring-boot-demo/blob/master/encoder/HELP.md) actuator|[autuator介绍](https://github.com/smltq/spring-boot-demo/blob/master/actuator/README.md) admin|[可视化服务监控、使用](https://github.com/smltq/spring-boot-demo/blob/master/admin/README.md) security-oauth2-credentials|[oauth2实现密码模式、客户端模式](https://github.com/smltq/spring-boot-demo/blob/master/security-oauth2-credentials/README.md) security-oauth2-auth-code|[基于spring boot实现oauth2授权模式](https://github.com/smltq/spring-boot-demo/blob/master/security-oauth2-auth-code/README.md) mybatis-multi-datasource|[mybatis、数据库集群、读写分离、读库负载均衡](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-multi-datasource) template-thymeleaf|[thymeleaf实现应用国际化示例](https://github.com/smltq/spring-boot-demo/blob/master/template-thymeleaf) mq-redis|[redis之mq实现,发布订阅模式](https://github.com/smltq/spring-boot-demo/blob/master/mq-redis) email|[email实现邮件发送](https://github.com/smltq/spring-boot-demo/blob/master/email) jGit|[java调用git命令、jgit使用等](https://github.com/smltq/spring-boot-demo/blob/master/jGit) webmagic|[webmagic实现某电影网站爬虫示例](https://github.com/smltq/spring-boot-demo/blob/master/webmagic) netty|[基于BIO、NIO等tcp服务器搭建介绍](https://github.com/smltq/spring-boot-demo/blob/master/netty) ### Spring Cloud 模块 模块名称|主要内容 ---|--- cloud-oauth2-auth-code|[基于spring cloud实现oath2授权模式](https://github.com/smltq/spring-boot-demo/blob/master/cloud-oauth2-auth-code) cloud-gateway|[API主流网关、gateway快速上手](https://github.com/smltq/spring-boot-demo/blob/master/cloud-gateway) cloud-config|[配置中心(服务端、客户端)示例](https://github.com/smltq/spring-boot-demo/blob/master/cloud-config) cloud-feign|[Eureka服务注册中心、负载均衡、声明式服务调用](https://github.com/smltq/spring-boot-demo/blob/master/cloud-feign) cloud-hystrix|[Hystrix服务容错、异常处理、注册中心示例](https://github.com/smltq/spring-boot-demo/blob/master/cloud-hystrix) cloud-zuul|[zuul服务网关、过滤器、路由转发、服务降级、负载均衡](https://github.com/smltq/spring-boot-demo/blob/master/cloud-zuul) cloud-alibaba|[nacos服务中心、配置中心、限流等使用(系列示例整理中...)](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba) #### Spring Cloud Alibaba 模块 模块名称|主要内容 ---|--- nacos|[Spring Cloud Alibaba(一)如何使用nacos服务注册和发现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README1.md) config|[Spring Cloud Alibaba(二)配置中心多项目、多配置文件、分目录实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README2.md) Sentinel|[Spring Cloud Alibaba(三)Sentinel之熔断降级](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README3.md) Dubbo|[Spring Cloud Alibaba(四)Spring Cloud与Dubbo的融合](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README4.md) RocketMQ|[Spring Cloud Alibaba(五)RocketMQ 异步通信实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README5.md) ### 其它 模块名称|主要内容 ---|--- leetcode|[力扣题解目录](https://github.com/smltq/spring-boot-demo/blob/master/leetcode) ## Spring Boot 概述 Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring BootSpring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只需要很少的Spring配置Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Sprin
模块Spring Boot项目打包是指将多个Spring Boot项目打包成一个单独的包或安装包,以便在其他计算机上运行和使用。这可以通过以下步骤实现: 1. 创建项目结构:在项目创建一个主模块和一个或多个子模块。主模块通常包含入口点应用程序和公共依赖项,而子模块包含特定的业务逻辑或功能。 2. 配置模块:在主模块的pom.xml文件中,添加必要的依赖项和插件来支持打包。这些插件包括Maven Surefire插件和Maven Assembly插件。 3. 配置模块:在子模块的pom.xml文件中,添加必要的依赖项和插件来引用主模块。 4. 构建项目:在命令行中运行mvn clean install命令,以构建整个项目。这将生成一个或多个可执行的JAR文件,每个文件对应一个模块。 5. 打包所有模块:可以使用Maven Assembly插件将所有模块打包成一个单独的包。该插件可以将不同的模块组合在一起,并创建单个可执行文件或安装包。 6. 发布到中央仓库:如果需要将项目发布到中央仓库或其他源代码管理库中,可以使用Maven的发布插件(如Maven Deploy插件)将打包后的文件上传到仓库中。 需要注意的是,多模块Spring Boot项目的打包过程可能会因项目的复杂性而有所不同。因此,建议仔细阅读相关文档和教程,以确保正确地执行打包过程。此外,还可以使用一些工具和库来简化打包过程,如Maven Shade插件和Gradle插件等。这些工具和库可以帮助您更轻松地管理依赖关系和打包过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值