文章目录
- Maven知识速查
- 1. Maven概述
- 2. Maven的作用
- 3. Maven的下载
- 4. Maven的环境配置
- 5. Maven 的基础组成
- 5.1 Maven仓库
- 5.1.1 本地仓库配置:
- 5.1.2 中央仓库配置:
- 5.1.3 镜像仓库配置
- 5.2 Maven坐标
- 6. Maven项目
- 6.1 手工创建Maven项目
- 6.2 自动构建项目
- 7. Maven依赖管理
- 7.1 依赖配置(版本规范)
- 7.2 依赖传递
- 7.3 可选依赖(不展示)
- 7.4 排除依赖(不需要)
- 7.5 依赖范围
- 7.6 依赖范围传递
- 8. Maven生命周期与插件
- 8.1 Maven生命周期
- 8.2 Maven插件
Maven知识速查
1. Maven概述
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
- POM(Project Object Model):项目对象模型
2. Maven的作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构:提供标准的、统一的项目结构(如下图:)
3. Maven的下载
- 官网:http://maven.apache.org/
- 下载地址:http://maven.apache.org/download.cgi
注:IDEA新版的直接自带Maven版本,用自带的也比较好。不然配置繁琐。
4. Maven的环境配置
- 依赖 Java,需要配置 JAVA HOME。
- 设置 MAVEN 自身的运行环境,需要配置 MAVEN_HOME
- 在Path中配置Maven的执行程序的路径(相信各位老道的 Java 选手已经会了)
- 测试环境配置结果:
MVN
5. Maven 的基础组成
5.1 Maven仓库
-
仓库:用于储存 Jar 包,供给 Java 项目使用。
-
仓库分类:
-
本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
-
远程仓库:非本机电脑上的仓库,为本地仓库提供资源
-
中央仓库:Mavenl团队维护,存储所有资源的仓库(https://repo1.maven.org/maven2/)
-
私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
-
-
-
私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar
- 中央仓库中的jar都是开源的,不能存储具有版权的资源
- 一定范围内共享资源,仅对内部开放,不对外共享
- 保存具有版权的资源,包含购买或自主研发的jar
5.1.1 本地仓库配置:
Maven,启动后,会自动保存下载的资源到本地仓库
< --! 默认位置>
<localRepository>${user.home}/.m2/repository</localRepository>
当前目录位置为登录用户名所在目录下的.m2文件夹中
<--! 自定义位置>
<localRepository>D:\maven\repository</localRepository>
当前目录位置为D:maven repository.文件夹中
5.1.2 中央仓库配置:
- 在路径:C:\Users\ljcg.m2\settings.xml 中修改配置
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
5.1.3 镜像仓库配置
- 在路径:C:\Users\ljcg.m2\settings.xml 中修改配置
<mirrors>
<!-- 配置具体的仓库的下载镜像 -->
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的nirror元素 -->
<id>nexus-aliyun</id>
<!-- 对哪种仓库进行镜像,简单说就是替代哪个仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称 -->
<name>Nexus aliyun</name>
<!-- 镜像URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
5.2 Maven坐标
- 坐标:Mavent中的坐标用于描述仓库中资源的位置(https://repo1.maven.org/maven2/)
- 坐标的组成:
groupld(组织ID):定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
artifactld(项目ID):定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version(版本号):定义当前项目版本号
packaging:定义该项目的打包方式
- 坐标的作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
6. Maven项目
6.1 手工创建Maven项目
- Maven工程目录
- 在src同层目录下创建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>org.example</groupId>
<artifactId>untitled</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>untitled</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
6.2 自动构建项目
- Tomcat7运行插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
7. Maven依赖管理
7.1 依赖配置(版本规范)
- 在 pom.xml 文件中安装所需要的依赖
- 格式:
<!-- 设置当前项目所有依赖 -->
<dependencies>
<!-- 设置具体需要的依赖 -->
<dependency>
<!-- 依赖所属群组 -->
<groupId>junit</groupId>
<!-- 依赖所属项目 -->
<artifactId>junit</artifactId>
<!-- 依赖版本 -->
<version>4.12</version>
</dependency>
</dependencies>
<!-- 版本规范 -->
– SNAPSHOT:开发版本,表示该版本仍在开发中,可能会频繁改变。
– RELEASE:发布版本,表示该版本为稳定版本,很少改变。(非SNAPSHOT的就是RELEASE)
– ALPHA:内部测试版本,一般不供外部使用。
– BETA:公开测试版本,可供外部测试并提供反馈。
7.2 依赖传递
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
- 依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
7.3 可选依赖(不展示)
- 可选依赖指对外隐藏当前所依赖的资源一一不透明
- 格式:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 隐藏配置 -->
<optional>true</optional>
</dependency>
7.4 排除依赖(不需要)
- 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本一一不需要
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 依赖排出配置 -->
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
7.5 依赖范围
- 依赖的jar默认情况可以在任何地方使用,可以通过 scope 标签设定其作用范围
- 格式:
<scope>compile</scope>
- 作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
7.6 依赖范围传递
- 带有依赖范围的资源在进行传递时,作用范围将受到影响
8. Maven生命周期与插件
8.1 Maven生命周期
- Maven构建生命周期描述的是一次构建过程经历经历了多少个事件
8.2 Maven插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其他功能
<!-- 自定义插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<!-- 可以多个构建包 web项目是:war-->
<goal>jar</goal>
<goal>test-jar</goal>
</goals>
<!-- 生命流程 -->
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>