Maven服务于Java平台的自动构件工具
构件工具演变:
Make->Ant->Maven->Gradle
- MAVEN_HOME 到bin上一级目录 不带bin
E:\Maven\apache-maven-3.6.2
- path 通常到bin目录 带bin
E:\Maven\apache-maven-3.6.2\bin
- 配置好后验证版本cmd里运行
mvn -v
- Maven核心程序中仅仅定义了抽象的生命周期,具体的工作需要特定的插件来完成。而插件并不在Maven核心程序中。
- 当我们执行Maven命令时,Maven核心程序首先到本地仓库中查找插件,若没有则连接外网,到中央仓库下载。
- 本地仓库位置:系统当前用户的家目录\ .m2\repository
- 修改仓库位置:
- maven安装目录下 \conf\settings.xml
- 找到localRepository标签修改路径即可
- 清理:
将以前编译得到的旧的class字节码删除,为下一次编译做准备 - 编译:
将java源程序文件编译成class字节码文件 - 测试:
自动测试,自动调用junit程序 - 报告:
测试程序执行的结果 - 打包:
动态Web工程打war包,java工程打jar包 - 安装:
Maven特定的概念——将打包得到的文件复制到仓库中指定位置 - 部署:
将动态Web工程生成的war包复制到servlet容器的指定目录下,使其可以运行
项目名
| --src源码
| --|--main(主程序)
| --|--|--java(源码)
| --|--|--resources(资源文件或框架配置文件)
| --|--test(测试程序)
| --|--|--java(源码)
| --|--|--resources(资源文件或框架配置文件)
| --pom.xml(maven配置文件)
注意:执行与构建相关的Maven命令,必须进入pom.xml所在目录
mvn clean
清理
mvn compile
编译主程序
mvn test-compile
编译测试程序
mvn test
执行测试
mvn package
打包
mvn install
对于maven工程安装到本地仓库
mvn site
生成站点
使用三个向量唯一定位一个Maven工程
groupid:公司或组织域名倒序+项目名
<groupid>com.phk.web</groupid>
artifactid:模块名
<artifactid>socket</artifactid>
version:版本号
<version>1.0.0</version>
Maven工程的坐标与仓库中路径是对应的
- 本地仓库:当前电脑上所有Maven工程服务
- 远程仓库:
- 私服:搭建在局域网环境中,为局域网范围内所有Maven工程服务
- 中央仓库:架设在Internet上,为全世界所有Maven工程服务
- 中央仓库镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快响应用户请求
- Maven自身所需的插件
- 第三方框架或工具的jar包
- 我们自己开发的Maven工程
- Maven依赖解析信息时会到本地仓库找被依赖的jar包。
- 对于我们自己开发的Maven工程,使用
mvn install
命令安装到本地仓库
默认为compile
- compile
- 对主程序有效
- 对测试程序有效
- 参与打包
- test
- 对主程序有效
- 对测试程序有效
- 参与打包
- provide
- 对主程序有效
- 对测试程序有效
- 参与打包
例子:servlet-api.jar
因为Tomcat容器提供了某些jar包,而开发时并没有这些jar包,部署时会被忽略。
依赖具有传递性,Maven会自动将所有需要依赖的自动添加到当前工程在,拓扑序吧
工程A->工程B
在工程A的pom.xml中加入工程B的依赖,然后工程B的所有可传递依赖会到工程A中
- 可以传递的依赖不必在每个模块工程都重复声明,只需要在最底层工程依赖一次即可
- 注意:非compile范围的依赖不能传递
<dependency>
<exclusion>
<groupId><\groudId> <!--设置排除的坐标即可-->
<artifactId><\artifactId>
<\exclusion>
<\dependency>
- 当依赖传递过来的一个jar包有不同版本的时候,传递路径短的jar包版本优先
- 当两者路径长度相同时,再dependency内先声明者优先
在pom.xml文件定义一个自定义标签
在其他依赖的version标签用${}来代替
<properties>
<phk.version>1.0.0.RELEASE<\phk.version>
<\properties>
<groupId>servlet<\groudId>
<artifactId>servlet<\artifactId>
<version>${phk.verson}<\version>
专程建立一个父工程来管理所有子工程的依赖,打包方式为pom
父工程:
配置依赖管理标签
<dependencyManagement>
<dependenies>
<groupId>servlet<\groudId>
<artifactId>servlet<\artifactId>
<version>4.9<\version>
<scope>provided<\scope>
<\dependenies>
<\dependencyManagement>
子工程声明父工程
<parent>
<groupId><\groudId> //父工程坐标
<artifactId><\artifactId>
<version><\version>
<!--以当前工程的pom为基准到父工程pom相对路径-->
<relativePath><\relativePath>
<\parent>
子工程中删除重复部分:
例如删除<groupID>,<version>
配置继承后执行安装命令时要先安装父工程
作用:一键安装各个模块工程
配置方式:在父工程加入<modules>
<modules>
<!--指定各个子工程相对路径-->
<module>../web<\module>
<module>../UI<\**module**>
<module><\module>
<module><\module>
<\modules>
使用方式:在聚合工程上运行mvn install
- 各个构件环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
- Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
- Maven核心程序为了更好的实现自动化构件,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行
-
- 生命周期的各个阶段仅仅定义了要执行的任务是什么。
- 各个阶段和插件的目标是对应的。
- 相似的目标由特定的插件来完成。
2020.1.23完结