[动力节点]项目管理工具 Maven

1. 简介

  1. Apache 公司的项目管理工具Maven - 图1
  2. 为什么需要项目管理工具
    1. 管理项目中的多个模块之间的关系
    2. 获取、导入第三方的功能需要的jar包
    3. 管理jar包版本
    4. 管理jar包、驱动之间的依赖
  3. Maven做的工作
    1. 下载、导入jar包
    2. 管理jar包、版本、依赖关系
    3. 测试代码正确性,编译程序
    4. 打包jar、war文件
    5. 部署项目
  4. 安装maven
    1. 官网下载maven bin文件:http://maven.apache.org/download.cgi
    2. 解压缩
      1. bin:可执行文件 mvn.cmd
      2. conf:maven 工具本身的配置文件 settings.xml
    3. 配置系统环境变量
      1. H2_HOME = 解压缩目录
      2. %M2_HOME%\bin 加入 path 变量
      3. 也需要配置 JAVA_HOME 变量
    4. 验证:在CMD中,执行mvn -v

2. 概念

  1. 项目构建
    面向过程,完成项目代码的编译、测试、运行、打包、部署
    1. 清理:删除项目编译内容,为新编译做准备
    2. 编译:与javac一次只编译一个文件不同,maven批量编译项目文件
    3. 测试:批量测试代码,验证功能
    4. 报告:生成测试结果文件
    5. 打包:把class文件、配置文件放到结果文件,通常是压缩文件中(java程序是 .jar;web应用程序对应的是 .war)
    6. 安装:将结果文件安装到本地仓库
    7. 部署:安装程序
  2. POM(Project Object Model):

    1. pom.xml 项目对象模型;通过 POM 的配置来控制项目构建的过程、管理jar包依赖
    2. 结构
      1. 基本信息
        1. modelVersion:版本号
        2. groupId:公司域名倒写+项目名称
        3. artifactId:模块名称
        4. version:项目的版本号
        5. packaging:项目打包的类型(可以不写,默认为jar,可选为)
      2. 依赖信息
        1. dependencies:项目中所需的资源说明,如驱动
        2. dependency
      3. 属性:properties
      4. 构建
        1. build:配置 maven 项目构建的参数,如配置JDK版本
          1. plugins:配置插件
          1. groupId
          2. artifactId:配置插件的名称
          3. version:配置插件版本
          4. configuration:配置插件信息
          1. source:编译环境
          2. target:运行环境
      5. 继承:parent
      6. 聚合:modules
    3. 约定目录结构```latex Project ├───src │ ├───main │ │ ├───java │ │ └───resource │ └───test │ ├───java │ └───resource └───pom.xml

      1. <br />![](https://gitee.com/Lau_Sen/markdownimags/raw/master/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20200910202307.png#align=left&display=inline&height=465&margin=%5Bobject%20Object%5D&originHeight=465&originWidth=801&status=done&style=none&width=801)
      2. 1. 在 java文件中放程序包和包中的java文件,在resources中放置java程序所需的配置文件
      3. 2. 可以在 PowerShell 中使用 `tree dirName` 的命令以树形展示文件夹结构
      4. 3. 在项目文件夹下,在CMD中执行 `mvn compile` 可以一次性编译main文件夹中的全部java文件,在项目根目录中生成target目录(结果目录)
      5. 4. 第一次使用maven,需要下载插件(jar文件)到默认的maven本地仓库,可以用阿里镜像加快速度。在maven解压缩文件夹 /conf/settings.xml 文件中添加镜像配置```xml
      6. <mirrors>
      7. <mirror>
      8. <id>nexus-aliyun</id>
      9. <mirrorOf>*</mirrorOf>
      10. <name>Nexus aliyun</name>
      11. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      12. </mirror>
      13. </mirrors>
      1. 在maven解压缩文件夹 /conf/settings.xml 文件中配置本地资源仓库xml <localRepository>/path/to/local/repo</localRepository>
  3. 坐标(G-A-V)

    1. https://mvnrepository.com/ maven 仓库
    2. 即pom.xml文件中的 groupId,artifactId和version,用来唯一标识项目资源
  4. 依赖管理
    1. 通过 GVA 坐标,依次从本地-私服-镜像-中央仓库中查询所需的依赖资源
  5. 仓库管理

    1. 存放资源
      1. maven 使用的插件
      2. 项目使用的jar包
    2. 仓库的分类
      1. 本地仓库:PC本地存放jar文件的文件夹
      2. 远程仓库:需要连接网络访问下载
        1. 中央仓库
        2. 镜像(中央仓库的备份)
        3. 私服(局域网中的私人服务器)
    3. 查询访问资源的次序:本地 —> 私服 —> 镜像 —> 中央仓库
    4. 第一次使用maven,需要下载插件(jar文件)到默认的maven本地仓库,可以用阿里镜像加快速度。在maven解压缩文件夹 /conf/settings.xml 文件中添加镜像配置xml <mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>

    5. 在maven解压缩文件夹 /conf/settings.xml 文件中配置本地资源仓库所在路径(非中文文件夹名;存放jar包)

      1. <localRepository>/path/to/local/repo</localRepository>
  6. 生命周期:maven构建项目的过程

    1. 清理
    2. 编译
    3. 测试
    4. 报告
    5. 打包
    6. 安装
    7. 部署
  7. 插件和目标
    1. 插件:实际上执行maven项目构建的工具
    2. junit 框架:借助单元测试,批量地对类中的方法进行测试
      1. 在 pom.xml 中添加 JUnit 依赖
      2. 在 maven 项目中的 src/test/java/ 目录下创建测试程序
        1. 测试类的名称 Test + 类名称
        2. 测试方法名称 test + 方法名称
        3. 测试方法前加上注解 @Test,必须是 public 修饰,不能有返回值
  8. 继承
  9. 聚合

3. 工程

  1. Maven命令(清理-编译-测试-打包-部署)
    mvn clean:清理target结果目录,已经install 仓库中的包不会被删除
    mvn compile:编译主程序 src/main/java/ 目录下的程序,生成target结果目录;而不编译 src/test/java/ 目录下的程序
    mvn test-compile:编译测试程序,只编译 src/test/java/ 目录下的程序
    mvn test:测试,生成surefire-reports来保存测试结果;会先执行一遍 mvn cleanmvn compilemvn test-compile
    mvn package:打包主程序(编译、编译测试、测试,按照pom.xml配置来打包为jar或war包)
    mvn install:保存到本地仓库(也会将前面的流程走一遍)
    mvn deploy:将工程保存到本地仓库、私服仓库,自动部署到 web容器中
  2. IDEA中的Maven配置
    1. File-Settings-Build, Excution, Deployment-Build Tools-Maven:使用自己安装的maven,需要覆盖idea中maven的安装目录
      1. Maven Home Directory:从内置的 Bundled(Maven 3)改为解压缩的目录
      2. User Settings File:覆盖为解码所目录下的配置文件
      3. Local Repository:
    2. File-Settings-Build, Excution, Deployment-Build Tools-Maven-Runner
      1. VM Options:archetypeCatalog=internal;maven项目创建时会联网下载模板文件,耗时较长,如此设置不用下载
      2. JRE:选择 JDK
    3. File-New Porject Settings-Settings for New Project 中进行相同的操作,为新工程进行配置maven
  3. Idea中创建项目 Maven - 图2
    1. File-New Project-Empty Project 定义好项目名后,确定
    2. File-New Module-Maven
      1. 选择 Project SDK
      2. 勾选 Create from archetype;找到 maven-archetype-quickstart;点 next
      3. 填写module 的 Name
      4. 在Properties 中填写 GroupId:公司名倒写
    3. 在 src/main/ 和 src/test/ 文件夹下放置 resources 文件夹,并且Mark Directory as 为对应的资源目录
    4. 测试类中的测试函数
      1. @Test 注解
      2. 必须是 public,不能是 static;
      3. 不能有输出,返回void类型;
      4. 不能传参
  4. 创建 Java Web 文件
    1. 同上,创建空项目
    2. 创建Maven module
    3. 勾选 Create from archetype;找到 maven-archetype-webapp;点 next
    4. 在 src/main/ 文件夹下放置 resources 文件夹,并且Mark Directory as 为对应的资源目录

4. 管理

依赖范围

  1. <scope></scope> 标识;
  2. scope字段的值包括
    1. compile(默认):参与主程序、测试程序、打包、部署
    2. provided:仅对主程序、测试程序有效;使用者(服务器)自己提供,本地不用准备,package打包的时候不会对该插件进行打包
    3. runtime
    4. test:仅参与测试程序
    5. system
    6. import

5. 设置

  1. 属性设置```xml UTF-8 1.7 1.7 5.2.8

org.springframework spring-context ${spring.version}.RELEASE org.springframework spring-core ${spring.version}.RELEASE


2. 全局变量
   1. 声明:在 `<properties></properties>`中,通过自定义标签声明变量
   2. 使用:在 pom.xml 文件其他位置,使用 `${标签名}`使用变量的值
3. 资源插件```xml
<build>  
    <finalName>test</finalName>   
    <resources>  
        <resource>  
            <directory>src/main/resources</directory>  
            <includes>  
                <include>**/*.properties</include>  
                <include>**/*.xml</include>  
                <include>**/*.tld</include>  
            </includes>  
            <filtering>false</filtering>  
        </resource>  
        <resource>  
            <directory>src/main/java</directory>  
            <includes>  
                <include>**/*.properties</include>  
                <include>**/*.xml</include>  
                <include>**/*.tld</include>  
            </includes>  
            <filtering>false</filtering>  
        </resource>  
    </resources>  
</build>
  1. 未设置 resources的时候,maven执行编译
    1. 会将 src/main/resources 目录中的文件拷贝到 target/classes 目录下
    2. 会将 src/main/java 目录中的文件不会被拷贝到 target/classes 目录下
  2. 如果需要在maven执行编译的时候,将src/main/java目录中的文件被拷贝到 target/classes 目录下,需要在<build> 中 加入 <resources>