学习资源

  1. 视频课程
  2. 时长统计小工具

学习笔记

一、IDEA中使用Maven

0. 安装Maven

下载

  • 解压Maven压缩包到某路径(非中文路径)下
  • 配置Maven的环境变量
  • 在cmd命令行中输入 mvn -v 测试是否安装并配置好了环境变量

1. 配置Maven

1.1 配置本地仓库

  • 介绍
    • Maven核心程序不包含具体功能,具体功能由插件完成。
    • Maven 核心程序会到本地仓库中查找插件。
    • 如果本地仓库中没有就会从远程中央仓库下载,如果不能联网就无法执行Maven的具体功能
    • 为此可以将Maven的本地仓库指向联网情况下下载好的目录。
    • Maven默认本地仓库为 ~/.m2/repository
  • setting.xml

    1. <!-- localRepository
    2. | The path to the local repository maven will use to store artifacts.
    3. |
    4. | Default: ${user.home}/.m2/repository
    5. <localRepository>/path/to/local/repo</localRepository>
    6. -->
    7. <localRepository>E:\document\repository</localRepository>

    1.2 配置阿里云镜像

  • 阿里云 Maven 镜像

    1. <mirror>
    2. <id>aliyunmaven</id>
    3. <mirrorOf>*</mirrorOf>
    4. <name>阿里云公共仓库</name>
    5. <url>https://maven.aliyun.com/repository/public</url>
    6. </mirror>
  • IDEA配置

    • 20201120113430.png
    • 20201120113625.png

2. 创建Maven项目

20201120114922.png
20201120115118.png
20201120115429.png
20201120115948.png

3. 打包web程序

  1. <build>
  2. <finalName>maven-test</finalName>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-war-plugin</artifactId>
  7. <version>2.2</version>
  8. <configuration>
  9. <!--必须配置此,否则maven找不到web.xml文件位置-->
  10. <webXml>WEB-INF\web.xml</webXml>
  11. </configuration>
  12. </plugin>
  13. </plugins>
  14. </build>

然后执行maven生命周期命令 package 即可在target文件夹内生成war包

二、Maven简介

1. 构建

  • 清理
    • 把之前编译的删除掉,为新编译做准备
  • 编译
    • 编译为class文件
  • 测试
    • 可批量执行测试代码
  • 报告
    • 生成测试结果的文件
  • 打包
    • 把所有class文件,配置文件等资源放入一个压缩文件中。通常java程序是 jar扩展名,对于web应用则是 war 扩展名
  • 安装
    • 把【打包】生成的jar、war安装到本机仓库
  • 部署
    • 把程序安装好可执行

2. maven核心概念

  • POM
    一个文件名为 pom.xml,翻译为 项目对象模型 控制maven构建项目的过程,管理jar依赖
  • 约定的目录结构 maven项目目录和文件位置有规定
  • 坐标 唯一字符串,表示资源的
  • 依赖管理 管理 jar 文件
  • 仓库管理 了解 存放资源位置
  • 生命周期 了解 maven构建项目的过程
  • 插件和目标 了解 执行maven构建的时候用的工具是插件
  • 继承
  • 聚合

三、核心概念

1. 约定目录结构

每一个maven项目都是以文件夹形式保存在磁盘上的

  1. |---src
  2. | |---main # 主程序java代码和配置文件
  3. | | |---java # 程序包和java文件
  4. | | |---resource # 配置文件
  5. | |---test # 测试程序和文件(可以没有,非强制)
  6. | | |---java # 测试程序包和java文件
  7. | | |---resource # 测试程序配置文件
  8. |---pom.xml # maven核心文件(maven项目必须有)

>`` ``mvn compile 在根目录下生成 target 目录(结果目录),maven编译后的java程序,所有的class文件都存放在此。

2. pom文件

用于搜索的中央仓库:https://mvnrepository.com/

  • modelVersion
    • 模型版本,只能是4.0
  • 坐标:唯一值,互联网中唯一标识一个项目
    • groupId
      • 组织id
      • 一般是公司域名的倒写
    • artifactId
      • 项目名称,也是模块名称,对应groupId项目中子项目
    • version
      • 项目版本号,如果项目仍在开发中,不稳定版在版本后加 -SNAPSHOT
      • 三位数字标识 3.3.3
  • packaging 项目打包类型,可以使用jar/war/rar/ear/pom,默认是jar,可以省略不写
  • dependencies 依赖,项目使用各种资源说明
  • properties 配置属性
  • build 构建,构建相关配置

3. 仓库

  • 仓库用来存放maven使用的jar和项目使用jar的地方
  • 分类
    • 本地仓库,个人计算机文件夹
    • 远程仓库
      • 中央仓库(权威)
      • 中央仓库镜像(备份)
      • 私服,公司内部局域网使用,不对外使用
  • 仓库使用
    • 不需要人为参与
    • maven查看本地仓库—>私服—>镜像—>中央仓库

4. 生命周期

  • 各个构建环节需要严格按照顺序执行,不能胡乱执行
  • 各个周期具体操作由插件执行
  • 无论执行生命周期哪个阶段的命令,都会使得生命周期从头开始执行

5. 常用命令

  • mvn clean 清除target文件夹
  • mvn compile 编译主程序
    • 把 src/main/resources 文件内所有文件原封不动拷贝进 target/classes 文件夹内
    • 把 src/main/java 内所有类编译为 class 文件放入 target/classes 文件夹内
  • mvn test-compile 编译测试程序
  • mvn test 执行测试
  • mvn package 打包
  • mvn install 安装依赖
  • mvn site 生成站点

6. 插件

一些jar文件,真正完成maven的功能

7. 坐标

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.12</version>
  5. <scope>test</scope>
  6. </dependency>

8. 依赖

8.1 依赖的范围

scope属性

属性 对主程序是否有效 对测试程序是否有效 是否参与打包 典型例子
compile
test junit
provided servlet-api

image.png

image.png

四、依赖管理

1. 依赖的传递性

  • 非 compile 范围的依赖不可传递

1.1 直接依赖

直接引用的依赖

1.2 间接依赖

因为依赖的传递性,直接引用的依赖中引用的其他依赖称为间接依赖

2. 依赖的排除

2.1 设置需要排除依赖的场景

当某些jar包属于不稳定版本,我们可以考虑排除此依赖

2.2 设置方式

  1. <exclusions>
  2. <exclusion>
  3. <groupId />
  4. <artifactId />
  5. <version />
  6. </exclusion>
  7. </exclusions>

3. 依赖的原则

解决模块工程之间jar包冲突

3.1 就近原则

image.png

3.2 先声明优先

dependency标签声明顺序在前的优先
image.png

4. 统一管理依赖的版本

  • properties 标签统一声明版本号
  • 需要统一版本位置,使用 $(自定义标签名) 引用声明的版本号 ```xml 4.12

junit junit ${test.package.version} test

  1. <a name="IG9vm"></a>
  2. ### 5. 继承
  3. - 统一管理各个模块工程中对junit依赖的版本
  4. - 将 junit 依赖统一提取到父工程中,在子工程声明依赖时不指定版本,以父工程中统一设定为准
  5. - 步骤
  6. - 创建一个maven工程作为父工程,打包的方式pom
  7. - 在子工程中声明对父工程的引用
  8. - 将子工程的坐标中域父工程坐标重复的内容删除
  9. - 父工程统一junit依赖
  10. - 子工程删除junit依赖的版本号。
  11. - 配置继承后,要先安装父工程
  12. <a name="ewfIp"></a>
  13. ### 6. 聚合
  14. 一键安装各个模块工程<br />配置:在一个‘总聚合工程’中配置各个参与聚合的模块
  15. ```xml
  16. <!-- 配置聚合 -->
  17. <modules>
  18. <!-- 指定各个子工程的相对路径 -->
  19. <module>../Hello</module>
  20. <module>../HelloFriend</module>
  21. <module>../MakeFriends</module>
  22. </modules>

五、常用设置

1. 构建

  1. <!-- 配置构建过程中需要使用的插件 -->
  2. <plugins>
  3. <plugin>
  4. <!-- cargo 是专门从事启动servlet容器的组织 -->
  5. <groupId>org.codehaus.cargo</groupId>
  6. <artifactId>cargo-maven2-plugin</artifactId>
  7. <version>1.2.3</version>
  8. <!-- 针对此插件进行配置 -->
  9. <configuration>
  10. <!-- 配置当前系统中容器的配置 -->
  11. <container>
  12. <containerId>tomcat6x</containerId>
  13. </container>
  14. </configuration>
  15. <!-- 配置插件在什么情况下执行 -->
  16. <executions>
  17. <execution>
  18. <!-- 生命周期阶段 -->
  19. <phase>install</phase>
  20. <goals>
  21. <!-- 插件目标 -->
  22. <goal>run</goal>
  23. </goals>
  24. </execution>
  25. </executions>
  26. </plugin>
  27. </plugins>