zoukankan      html  css  js  c++  java
  • 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调用啦

  • 相关阅读:
    索引碎片整理
    SQL Server表分区案例
    SQL分页查询语句
    SQL Server表分区
    SQL Server优化
    SQLSERVER中WITH(NOLOCK)详解
    作业四
    第三次k均值
    机器学习第二次作业
    机器学习
  • 原文地址:https://www.cnblogs.com/c2g5201314/p/12879917.html
Copyright © 2011-2022 走看看