spring boot & maven 多模块 ---心得
作者:互联网
1.前言
有个名字叫 多模块企业级项目 ,其实就是一个父级maven工程里面有着多个子级maven工程的项目 ,甚至在子级maven 里面还有多个子级maven,
这用到了 maven多模块开发的使用。
如这样
子级maven其实可以自定义设置,当然,也可以根据企业规范,将每一层的代码都装在不同的子级maven里面
如这样
2.idea怎么创建 子级maven项目呢?
(1)在根目录,找到父级项目名右键打开选项,选择 New-Module
(2)选择springboot 项目
(3)填写信息
(4)勾选默认的依赖,其实也可以不选择,工程建立后就可以去pom.xml文件手动添加依赖,但最少添加这个依赖 ,不然不可以使用spring注解controller
Thymeleaf 是html页面使用的语言库 ,类似于jsp文件里面的jstl语言 ,可以使用 ${}赋值 ,有他自己的一套语法调用 ,一般html作为前端页面时才用到 ,这里可以不选
点击next-finish ,等待一会,就加载完毕了
这是最基础的目录结构,注意,controller 层文件必须要在启动类的文件夹里面才能被http访问, 默认的spring boot 配置文件是 application.properties文件 ,但是 如果想要用 yml文件 ,则需要另外配置,不能直接改后缀 ,具体配置方法,看我的另一边随笔吧
(5)启动
(6)测试
浏览器 输入 http://localhost:8080/bb
成功 !!! 撒花
看一下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> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo-my-cen-test</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo-my-cen-test</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</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>View Code
可以看到,这是默认的父级maven 并不是 自己的 ,而是spring boot 默认的版本控制 ,
应该修改成自己父级项目的 信息 ,不然不能调用父级的文件【包括依赖包】 ,如果引用了父级,如果父级有引入的依赖,子级也需要用到,那么子级引入相同的依赖可以不写版本号,那么将会调用父级的依赖包
如果子级依赖包写版本号,将会以子级的写有版本号的依赖覆盖父级的依赖,也就是说重新加载一次依赖包文件,不使用父级依赖
完整的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> <!-- <parent>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-starter-parent</artifactId>--> <!-- <version>2.2.7.RELEASE</version>--> <!-- <relativePath/> <!– lookup parent from repository –>--> <!-- </parent>--> <parent> <groupId>com.atguigu.springcloud</groupId> <!-- 父级maven模块的工程名字--> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.example</groupId> <artifactId>demo-my-cen-2-2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo-my-cen-2-2</name> <!-- <description>Demo project for Spring Boot</description>--> <!-- <properties>--> <!-- <java.version>1.8</java.version>--> <!-- </properties>--> <dependencies> <!-- spring boot注解依赖--> <!-- web容器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <!-- 用于能够使用controller等web注解功能--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 用于测试的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 用于mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- --> <!-- spring cloud--> <!-- 将微服务provider侧注册进eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!----> <!-- --> <!-- 测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!-- --> <!-- MySQL 依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- <version>5.0.4</version>--> </dependency> <!-- 数据库jdbc驱动依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <!-- <version>1.0.31</version>--> </dependency> <!-- 是由log4j创始人设计的另一个开源日志组件--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <!-- /--> <!-- 修改后立即生效,热部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>View Code
3.父级与子级maven 调用关系
(1)父级pom.xml规范
如果引用了父级,如果父级有引入的依赖,子级也需要用到,那么子级引入相同的依赖可以不写版本号,那么将会调用父级的依赖包
如果子级依赖包写版本号,将会以子级的写有版本号的依赖覆盖父级的依赖,也就是说重新加载一次依赖包文件,不使用父级依赖
父级需要引入版本控制 ,其他该干嘛就干嘛,不需要做什么其他设置 ,但是,如果有子级maven,需要在父级pom.xml文件底部添加子级module 信息
注意 父级maven 打包方式一定要是 pom
父级pom.xml模板
<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> <groupId>com.atguigu.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- //打包方式--> <packaging>pom</packaging> <properties> <!--指定Maven用什么编码来读取源码及文档 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--指定Maven用什么编码来呈现站点的HTML文件 --> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.16.18</lombok.version> </properties> <dependencyManagement> <dependencies> <!--进行项目依赖版本通过一管理--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <!--进行项目依赖版本通过一管理--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.9.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.31</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>microservicecloud</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <delimiters> <delimit>$</delimit> </delimiters> </configuration> </plugin> </plugins> </build> <!-- 指出子模块的artifactId,有多少个子maven这里就有多少个<module>--> <modules> <module>microservicecloud-api</module> <module>microservicecloud-provider-dept-8001</module> <module>microservicecloud-consumer-dept-80</module> <module>microservicecloud-eureka-7001</module> <module>microservicecloud-eureka-7002</module> <module>microservicecloud-eureka-7003</module> <module>microservicecloud-provider-dept-8002</module> <module>microservicecloud-provider-dept-8003</module> <module>microservicecloud-consumer-dept-feign</module> <module>microservicecloud-provider-dept-hystrix-8001</module> <module>microservicecloud-consumer-hystrix-dashboard</module> <module>microservicecloud-zuul-gateway-9527</module> <module>microservicecloud-config-3344</module> <module>microservicecloud-config-client-3355</module> <module>microservicecloud-config-eureka-client-7001</module> <module>microservicecloud-config-dept-client-8001</module> <module>demo-my-cen-2-2</module> </modules> </project>View Code
使用 dependencies ,代替了原来使用的spring-boot-starter-parent
(2)子级pom.xml规范
子级pom.xml需要引入 父级maven才可以调用他的依赖和文件
groupId 和 artifactId 应该要与父级pom.xml设置的一样
如果父级有引入的依赖,子级也需要用到,那么子级引入相同的依赖可以不写版本号,那么将会调用父级的依赖包
如果子级依赖包写版本号,将会以子级的写有版本号的依赖覆盖父级的依赖,也就是说重新加载一次依赖包文件,不使用父级依赖
完整子级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> <parent> <groupId>com.atguigu.springcloud</groupId> <!-- 父级maven模块的工程名字--> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.example</groupId> <artifactId>demo-my-cen-2-2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo-my-cen-2-2</name> <!-- <description>Demo project for Spring Boot</description>--> <!-- <properties>--> <!-- <java.version>1.8</java.version>--> <!-- </properties>--> <dependencies> <!-- spring boot注解依赖--> <!-- web容器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <!-- 用于能够使用controller等web注解功能--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 用于测试的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 用于mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- --> <!-- spring cloud--> <!-- 将微服务provider侧注册进eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!----> <!-- --> <!-- 测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!-- --> <!-- MySQL 依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!-- <version>5.0.4</version>--> </dependency> <!-- 数据库jdbc驱动依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <!-- <version>1.0.31</version>--> </dependency> <!-- 是由log4j创始人设计的另一个开源日志组件--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <!-- /--> <!-- 修改后立即生效,热部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>View Code
4.子级与子级maven 调用关系【同级maven】
子级A 想要调用子级B的文件 【如Java 的pojo类等】,那么该怎么实现?
(1)先在子级A的pom.xml文件里引入子级B,以依赖的方式引入,
看看子级B 的 groupId 和 artifactId
(2)在子级B新建一个pojo类
(3)于是就可以在子级A调用啦
标签:父级,spring,boot,springframework,maven,子级,org 来源: https://www.cnblogs.com/c2g5201314/p/12879917.html