简介

聚合工程里可以分为:

  • Project 项目,也可称为顶级项目、顶级工程、父工程
  • Module 模块,也可称为子模块、子工程

总结一下:

  1. 这两者之间是父子继承的关系,即 模块继承顶级项目,模块之间是平级结构,可以相互依赖
  2. 模块可以使用顶级项目里所有的资源(依赖),模块之前如果要使用资源,必须构建依赖(构建关系)
  3. 一个顶级项目可以由多个不同的模块共同组合而成

项目结构

一个最简单的聚合工程的项目结构如下

└─foodie
├─foodie-common
│ └─src
└─src

创建顶级项目

  1. 在 New Project 弹出窗左侧中点击 Maven,右侧的 Project SDK 选择喜欢的 JDK 版本
  2. 点击 Next 按钮
  3. 根据实际情况填写 Name、Location、GroupId、ArtifactId、Version
  4. 点击 Finish 按钮
  5. 打开 pom.xml(默认已打开),在 <version> 标签下面添加 <packaging>pom</packaging> 标签

说明

packaging

<packaging> 标签是指项目的打包方式(The type of artifact this project produces),默认为 jar,最外层的顶级项目指定 pom,鼠标指在标签处,会提示常见的有 4 种方式,分别是 jar、war、ear、pom

提示中也说了 Plugins can create their own packaging, and therefore their own packaging types, so this list does not contain all possible types.,意思是你也可以创建自己的打包类型,不仅限于这 4 种

创建模块(子工程)

  1. 在左侧的 Project 窗口中找到顶级工程,然后在根目录上右键 -> New -> Module
  2. 在 New Module 弹出窗的右侧找到 Module SDK,选择喜欢的 JDK 版本
  3. 点击 Next 按钮
  4. 根据实际情况填写 ArtifactId(Name 和 Location 会跟着变),然后看所有的输入项是否满足期望,不满足的手动修改一下
  5. 点击 Finish 按钮

创建好 Module 后,顶级项目的 pom.xml 中会自动添加 <modules> 标签,其中包含了所有依赖此顶级项目的 Module

构建依赖关系

根据上一小节步骤,再创建一个 Module

然后假设 Module A 依赖于 Module B

  1. 打开 Module A 的 pom.xml,在喜欢的位置添加 <dependencies> 标签(输入 <,然后按一下 Tab 键或 Enter 键)
  2. 在 <dependencies> 标签里面再添加 <dependency> 标签(输入 <,然后按一下 Tab 键或 Enter 键)
  3. 在 <artifactId> 标签内填写 Module B 的 artifactId,例如 module-b
  4. 在 <groupId> 标签内填写顶级项目的 groupId,例如 cn.myesn(第 3 步完成后应该会自动跳转到 <groupId> 标签,并且会有相应的智能提示)

完成后,Module A 就可以直接使用 Module B 中提供的代码了

安装

如果模块与模块之间有依赖关系,根据上一小节步骤,写完依赖关系

  1. 点击 IDEA 右侧的 Maven 菜单
  2. 在 Maven 窗口中找到顶级项目,即项目名称后面有 (root) 字样的
  3. 展开顶级项目,展开 Lifecycle,双击 install

这样子模块之间的依赖关系才会真正存在

顶级项目引入 Spring Boot

  1. 打开顶级项目的 pom.xml
  2. 在 <moduleVersion> 标签下添加以下代码:
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.5</version>
    </parent>
  3. 在 <properties> 标签里面添加以下代码:
    <!-- 整体源码文件的编码设置 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- 整体源码文件编译后输出文件的编码设置 -->
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- 整体项目 JDK 的版本号 -->
    <java.version>1.8</java.version>
  4. 在 <properties> 标签下面添加以下代码:
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
    <!-- 这里排除 logging 是因为后期要集成其他的 logging 组件 -->
    <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
    </dependency>
    </dependencies>
  5. 点击 IDEA 软件右侧的 Maven,找到顶级项目,然后双击 Lifecycle 里面的 install

接口层模块项目配置

假设已经创建了 api 模块,然后按以下步骤操作:

  1. 在 api -> src -> main -> resources 路径下创建一个 application.yml 文件
  2. 在 api -> src -> main -> java 路径下创建一个包文件夹,例如 cn.myesn,后续用这个举例
  3. 在 cn.myesn 包下创建 Application.java 文件,然后在里面编写以下代码:
    package cn.myesn;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
    public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }
  4. 在 cn.myesn 包下创建一个 controller 的文件夹
  5. 在 controller 文件夹下创建一个 HiController.java 文件,然后在里面编写如下代码:
    package cn.myesn.controller;
    
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController; @RestController
    public class HiController { @GetMapping("hi")
    public ResponseEntity<String> hi(){
    return ResponseEntity.ok("hi");
    }
    }
  6. 点击 IDEA 软件右侧的 Maven,找到顶级项目,然后双击 Lifecycle 里面的 install
  7. 右键 Application.java 文件,单击 Run 'Application' 按钮
  8. 打开浏览器,输入 http://localhost:8080/hi,此时应该能看到页面显示了 hi 的字样

使用 IDEA 构建聚合工程并引入 Spring Boot的更多相关文章

  1. step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework

    文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...

  2. spring boot 教程(一) 构建我的第一个Spring boot

    Spring Boot特点 1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,无需部署WAR文件 3. 简化Maven配置 4. 自动配置Spring 5. 提供生产就绪型功能,如指标, ...

  3. 第2章 构建springboot工程 2-2 使用Spring官方STS搭建SpringBoot工程

    项目名demo,SpringBoot的版本2.0.6 删了/demo/mvnw和/demo/mvnw.cmd.static文件夹包含静态文件,比如CSS.JS.templates文件夹是放模板的,Sp ...

  4. maven项目引入spring boot依赖之后filter不生效的问题

    maven的filtering没有起作用,没有把占位符给替换掉.(大家可以执行mvn clean package,看看打包后的jar里面的application.properties文件,是否有替换占 ...

  5. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  6. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  7. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  8. 使用Intellij中的Spring Initializr来快速构建Spring Boot工程

    本文将介绍嵌入的Intellij中的Spring Initializr工具,它同Web提供的创建功能一样,可以帮助我们快速的构建出一个基础的Spring Boot/Cloud工程. 1.菜单栏中选择F ...

  9. Spring Boot2 系列教程(一) | 如何使用 IDEA 构建 Spring Boot 工程

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. Search 前言 新年立了个 flag,好好运营这个公众号.具体来说,就是每周要写两篇文章在这个号发表.刚立的 fla ...

随机推荐

  1. 运筹学之"概率"和"累计概率"和"谁随机数"

    概率 = 2/50 = 0.2 累计概率 = 上个概率加本次概率 案例1 概率=销量天数 / 天数 = 2 /100 = 0.02 累计概率 = 上个概率加本次概率 = 0.02 +0.03 = 0. ...

  2. 程序人生:织梦dedecms后台/会员验证码关闭

    dedecms默认是所有的功能几乎只要用到验证码的地方我们都需要验证的,如果要关闭一些验证功能我们可以参考下面的教程,这里介绍了关闭后台,留言板,会员系统等验证码功能关闭了.提示:支持DedeCMS ...

  3. css3 nth-child选择器

    css3 nth-child选择器 css3的nth-child选择器,乍看起来很简单,其实不是那么容易. 简单用法 p:nth-child(n) // 选择属于其父元素的第n个子元素的每个 < ...

  4. React系列——websocket群聊系统在react的实现

    前奏 这篇文章仅对不熟悉在react中使用socket.io的人.以及websocket入门者有帮助. 下面这个动态图展示的聊天系统是用react+express+websocket搭建的,很模糊吧, ...

  5. JS+CSS3 360度全景图插件 - Watch3D.js

    日常闲扯 从上一篇文章到这篇中间快过了一年了,时间真滴过得快.不是在下中间没想过写新的文章,而是自己确实变懒了(体重+1 +1 +1 +1....) ..OTL...不过到最后觉得还是需要写点东西,不 ...

  6. 关于data自定义属性

    新的HTML5标准允许你在普通的元素标签里,嵌入类似data-*的属性,来实现一些简单数据的存取.它的数量不受限制,并且也能由JavaScript动态修改,也支持CSS选择器进行样式设置.这使得dat ...

  7. C语言之:结构体动态分配内存(利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号、姓名和三门课(高数、物理和英语 )的成绩和平均分(整型)。)

    题目内容: 利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号.姓名和三门课(高数.物理和英语 )的成绩和平均分(整型). 编写程序,从键盘输入学生的人数,然后依次输入每个学生的学号. ...

  8. MFC---文档与视图结构

    文档与视图结构 文档.视图的关系,是一对多的映射,一个文档可以对应多个视图,而一个视图只能对应一个文档.例如,一个.html文件,可以用记事本打开,也可以用浏览器打开,这里的.html文件就是文档,记 ...

  9. C++ functional库中的仿函数

    一.仿函数简介 仿函数(functor)又称之为函数对象(function object),实际上就是 重载了()操作符 的 struct或class. 由于重载了()操作符,所以使用他的时候就像在调 ...

  10. WePY开发环境的安装和小程序生成WePY项目

    相对于微信开发者工具而言,WePY的安装和生成项目稍显复杂.特记录下安装顺序: 1.安装Node.js 在Node官网(https://nodejs.org/)下载Node.js的安装包,此处我下载的 ...