其他分享
首页 > 其他分享> > spring boot & maven 多模块 ---心得

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/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
<!--    </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