是什么
1. maven是一款服务于java平台的自动化构建工具
Maek -> Ant -> Maven -> Gradle
2. 构建
编译 -> 部署 -> 搭建
Ⅰ. 一个BS项目最终运行的并不是动态Web工程本身,而是该工程'编译的结果'。
所以,开发过程中,所有的路径或配置文件中配置的类路径(classes)都是以编译结果的目录结构为标准。
Ⅱ. 构建过程
Ⅰ.清理:删除上次编译后的就class字节码文件
Ⅱ.编译:将java源代码转为class字节码文件
Ⅲ.测试:自动测试,自动调用junit程序
Ⅳ.报告:测试程序执行的结构
Ⅴ.打包:动态Web程序打成war包,Java工程打成jar包
Ⅵ.安装:将打包后的文件复制到“仓库”中指定位置
Ⅶ.部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
安装Maven1. 安装java环境
由于maven是java开发的
2. 下载安装mavaen
历史版本下载:http://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/
只需要替换想要的版本号即可
4. 配置maven环境变量
M2_HOME:安装路径
path:%M2_HOME%\bin
5. 验证
mvn -v查看Maven版本信息
仓库
- 本地仓库:当前本机电脑的maven仓库
- 远程仓库:
- 私服:架设在当前局域网环境下,为当前局域网范围内的所有用户提供服务
- 中央仓库:架设在Internet上,为全世界所有Maven使用者服务
- 中央仓库的镜像:架设在各大洲,为中央仓库分流。减轻中央仓库的压力,同时能更快的响应用户请求
- 仓库中保存的内容
- Maven自身所需要的插件
- 第三方框架或工具的jar包
- 自己开发的maven工程
- 配置阿里云镜像仓库
<!--在setttins.xml文件中找到<mirrors></mirrors>标签对,进行修改-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
常用命令
执行与构建过程相关的maven命令,必须进入pom.xml文件所在的目录
- 命令
- mvn clean:清理
- mvn compile:编译主程序
- mvn test-compile:编译测试程序
- mvn test:执行测试
- mvn package:打包
- mvn install:安装
约定的目录结构
1. maven项目必须遵循的项目目录结构,才能实现自动化
项目名
src
main
java
resources
test
java
resources
pom.xml
2. 约定(架构) > 配置(框架) > 编码
POM
Project Object Model 项目对象模型
坐标
Maven使用三个向量在仓库中定义唯一的工程
- 三个向量
- groupid:公司或组织域名倒叙
- artifactid:模块名
- version:版本
<groupId></groupId>
<artifactId></artifactId>
<version></version>
依赖
- maven解析依赖信息时会去本地仓库中查找被依赖的jar包
- 自己开发的maven工程,需要执行mvn install命令安装到仓库后才可被别的工程依赖
- 依赖范围(scope)
compile | test | provided | |
对主程序是否有效 | ☑️ | ❎ | ☑️ |
对测试程序是否有效 | ☑️ | ☑️ | ☑️ |
是否参与打包 | ☑️ | ❎ | ❎ |
- provided的包在部署环境不再需要,由tomcat等容器提供。如:servlet-api.jar等
- 依赖传递性
- 依赖具有传递性,底层工程加入的包,所有依赖该工程的工程也会被加入该包
- 注意:非compile范围的依赖不能传递
- 传递原则:路径最短优先,
- 当有依赖冲突时会最先选择依赖路径最短的包
- 工程自身配置的依赖优先级最高
- 直接依赖的传递依赖次之
- 传递依赖的依赖优先级最低
- 当有路径相同的冲突依赖时,依赖标签最先声明的优先
- 依赖的排除
- 排除dependency直接依赖里传递的其他某个依赖
<dependencies>
<dependency>
<goupId></goupId>
<artifactId>直接依赖</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId>排除直接依赖中依赖的某个别的依赖</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- 依赖统一管理
- 使用properties标签自定义统一标签
- 使用${自定义标签}引用声明
<properties>
<自定义标签>1.0.0.RELAEASE</自定义标签>
</properties>
继承
- 统一管理各个模块工程中某个依赖的版本
父工程中统一设定依赖的版本号,子工程中声明该依赖时不再指定版本
- 父工程的打包方式为:pom
<packaging>pom</packaging>
jar为java程序
war为web程序
- 父工程中配置依赖的管理
// 父工程坐标
<groupId>父工程域名</groupId>
<artifactId>父工程名</artifactId>
<version>1.0.0-SNAPSHOT</version>
// 父工程打包方式
<packaging>pom</packaging>
// 父工程依赖管理
<dependencyManagement>
<dependencies>
// 父工程统一管理的依赖,父工程并不会真正去加载该依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 子工程只需声明groupId、artifactId,不再声明version。统一使用父工程指定的版本
- 子工程引入父工程
// 子工程引入父工程
<parent>
<groupId>父工程域名</groupId>
<artifactId>父工程名</artifactId>
<version>1.0.0-SNAPSHOT</version>
#以当前文件为基本的父工程pom文件的相对路径
<relativePath>../父工程项目名/pom.xml</relativePath>
</parent>
<dependencies>
// 子工程依赖,不再指定版本
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 配置继承后,install时需要先安装父工程,再安装子工程
聚合
- 目的:为了一键自动安装整个项目的父子工程
- 集合后只需要在父工程instaill,maven会自动按继承关系将整个项目顺序进行install
<!-- 父工程中配置聚合工程 -->
<modules>
<!-- 指定需要聚合的所有子工程。子工程的依赖继承顺序无所谓,maven会自动识别关系。-->
<module>../子工程1</module>
<module>../子工程2</module>
</modules>
自动构建
<!-- 配置当前工程构建过程中的特殊设置 -->
<build>
<!-- 工程打包的最终名称 -->
<finalName></finalName>
<!-- 配置当前工程构建过程需要使用的插件 -->
<plugins>
<plugin>
<groupId>插件包</groupId>
<artifactId>插件名</artifactId>
<version>插件版本</version>
</plugin>
</plugins>
</build>
打包自定义工具pom依赖
1. 先将自定义工具项目打包为jar文件
2. 执行mvn install命令生成pom
mvn install:install-file -DgroupId=com.wangl.util -DartifactId=export -Dversion=1.0.0 -Dfile=E:\export\target\export-1.0-SNAPSHOT.jar -Dpackaging=jar
3. 命令详解
mvn install:install-file
-DgroupId=com.wangl.util #这个是引用的包名 ,相当于 groupId
-DartifactId=export #这个是引用的名称 ,相当于 artifactId
-Dversion=1.0.0 #这个是引用的版本,相当于 version
-Dfile=E:\export\com.xxx.jar #这个是jar包文件所在的位置
-Dpackaging=jar #这个是打包类型
4. maven项目依赖自定义工具,pom.xml文件引用如下
<dependencies>
<dependency>
<groupId>com.wangl.util</groupId>
<artifactId>export</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>