自己爱看网课整理的一些Maven笔记 | 青训营笔记

167 阅读4分钟

Maven

  • Maven是专门用来管理和构建Java项目的工具,主要功能:
    • 提供了一套标准化的项目结构
    • 提供了一套标准化的构建流程(编译,测试,打包,发布...)
    • 提供了一套依赖管理机制

1. Maven基础

1. Maven的常用命令

  • compile: 编译
  • clean: 清理
  • test: 测试
  • package: 打包
  • install: 安装

2. Maven的生命周期

  • Maven构建项目生命周期描述的是一次构建过程经历了多少事件
  • Maven对项目构建的生命周期划分为3套
    • clean: 清理工作
    • default: 核心工作(编译,测试,打包,安装等)
    • site: 产生报告,发布站点等

3. Maven的坐标

  • 指的是资源的唯一标识

  • 使用坐标来定义项目或引入项目中需要的依赖

  • Maven的坐标主要组成‘

    • groupid:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.sky)
    • artifactId:定义当前Maven项目名称(通常是模块名称)
    • version:定义当前项目版本号

4. 使用坐标导入jar包

  1. 在pom.xml中编写标签
  2. 在标签中使用引入坐标
  3. 定义坐标的groupId, artifactId, version
  4. 点击刷新按钮使坐标生效

5. 依赖范围

  • 通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境,测试环境,运行环境
依赖范围编译classpath测试classpath运行classpath例子
compileYYYlogback
test-Y-Junit
providedYY-servlet-api
runtime-YYjdbc驱动
systemYY-存储在本地的jar包
import引入DependencyManagement引入DependencyManagement引入DependencyManagement

2. Maven高级

1. 分模块开发和设计

  • 分模块开发:将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享

  • 步骤

    1. 创建Maven模块
    2. 书写模块代码
    3. 通过Maven指令安装模块到本地仓库(install对应新的模块)

2. 依赖管理

  • 依赖传递

    依赖具有传递性

    • 直接依赖:当前项目中通过依赖配置(dependency)建立的依赖关系
    • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

    依赖传递冲突问题

    • 路径优先:当依赖中出现相同的资源时,层级原神,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

3. 可选依赖和排除依赖

  • 可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递(控制别人能不能看见我用的依赖)【不透明】

    <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
        		<version>1.0-SNAPSHOT</version>
        		<!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递 -->
        		<optional>false</optional>
            </dependency>
    
  • 排除依赖是隐藏当前资源对应的依赖关系(用别人的依赖可以剔除其中的依赖)【不需要】

    <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
        		<version>1.0-SNAPSHOT</version>
        		<!--排除依赖是隐藏当前资源对应的依赖关系 -->
        		<exclusions>
                    <exclusion>
                        <groupId>123</groupId>
                        <artifactId>123</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    

4. 继承和聚合

1. 聚合

  • 聚合:将多个模块组织成一个整体,同时进行项目构建的过程叫做聚合

  • 聚合工程:通常是一个不具有业务功能的“空”工程(有且只有一个pom文件)

  • 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建

    • 解决批量模块同步更新的问题

  • 聚合工程开发步骤

    1. 创建maven模块,设置打包类型为pom

      <packaging>pom</packaging>
      
    2. 设置当前聚合工程所包含子模块的名称

      <modules>
              <module>user-service</module>
              <module>order-service</module>
              <module>eureka-server</module>
              <module>feign-api</module>
              <module>gateway</module>
          </modules>
      

2. 继承

  • 作用:

    1. 简化配置(只需在父工程中进行依赖配置)
    2. 减少版本冲突(在父工程中的dependencyManagement下配置的依赖,子工程可以选择是否进行配置)
    <dependencyManagement>
            <dependencies>
                <!-- springCloud -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
        </dependencyManagement>
    

5. 属性

  1. 定义属性

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
            <mysql.version>5.1.47</mysql.version>
            <mybatis.version>2.1.1</mybatis.version>
        </properties>
    
  2. 引用属性

    <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>     <!--${spring-cloud.version} -->
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
  • 版本管理
    • 工程版本:
      • SNAPSHOT(快照版本)
        • 项目开发过程中临时输出的版本,成为快照版本
        • 快照版本会随着开发的进展不断更新
      • RELEASE(发布版本)
        • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本成为发布版本

6. 多环境配置与应用

  1. 定义多环境

    <profiles>
            <profile>
                <id>dev</id>
                <!--设置默认启动 -->
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
            </profile>
        </profiles>
    
  2. 使用多环境

mvn install -p dev
  • 跳过测试

    1. 应用场景
      • 功能更新中并且没开发完毕
      • 快速打包
    mvn install -D skipTests
    
    • 使用插件细粒度控制跳过测试

      <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-surefire-plugin</artifactId>
                      <version>2.22.2</version>
                      <configuration>
                          <skipTests>false</skipTests>
      <!--                    跳过不参与测试的内容-->
                          <excludes>
                              **/BookService.java
                          </excludes>
                      </configuration>
                  </plugin>
              </plugins>