笔记
Maven是什么
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
常用命令
mvn archetype:generate 创建Maven项目 mvn compile 编译源代码 mvn deploy 发布项目 mvn test-compile 编译测试源代码 mvn test 运行应用程序中的单元测试 mvn site 生成项目相关信息的网站 mvn clean 清除项目目录中的生成结果 mvn package 根据项目生成的jar mvn install 在本地Repository中安装jar mvn eclipse:eclipse 生成eclipse项目文件 mvnjetty:run 启动jetty服务 mvntomcat:run 启动tomcat服务 mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
构建过程中的各个环节
[1]清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
[2]编译:将java源程序编译成class字节码文件
[3]测试:自动测试,自动调用junit程序
[4]报告:测试程序执行的结果
[5]打包:动态web工程 打war包,java工程打jar包
[6]安装:Maven特定的概念---将打包得到的文件复制到“仓库”中的指定位置
[7]部署:将动态web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
安装Maven核心程序
1.安装JDK
2. Maven 下载地址:http://maven.apache.org/download.cgi
3.配置maven环境:
添加M2_HOME:对应Maven的解压目录即可
4.验证安装成功:mvn -v
本地仓库位置修改
修改解压目录下conf/settings.xml文件
<localRepository>D:\tools\repository</localRepository>
修改maven默认的JDK版本
<profile> <id>JDK-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
添加国内镜像源
<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
- 坐标
- 依赖
- 仓库
- 生命周期/插件/目标
- 继承
- 聚合
第一个Maven程序
- 创建约定的目录结构
(1)根目录:工程名
(2)src目录:源码
(3)pom.xml文件:Maven工程的核心配置文件
(4)main目录:存放主程序
(5)test目录:存放测试程序
(6)java目录:存放java源文件
(7)resources目录:存放框架或其他工具的配置文件
2.为什么要遵守约定的目录结构
- Maven要负责我们这个项目的自动化构建,以编译为例,Maven要想自动进行编译,那么它必须知道java源文件保存在哪里
- 如果我们自己自定义的东西想要让框架或工具知道
- 以配置的方式明确告诉框架
- 遵守框架内部已经存在的约定
- 约定>配置>编码
3.常用的Maven命令
(1)注意:执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录
与构建过程相关:编译、测试、打包、......
(2)常用命令(Maven核心程序如果在本地仓库中找不到需要的插件,会到*仓库联网下载)
tips:本地仓库位置:[系统中当前用户的家目录]\.m2\repository
修改maven默认本地仓库的位置:
conf的settings.xml中找到:<localRepository>/path/to/local/repo</localRepository>修改为准备好的Maven仓库目录
_1.mvn clean:清理
_2.mvn compile:编译主程序
_3.mvn test-compile:编译测试程序
_4.mvn test:执行测试
_5.mvn package:打包
4.POM
_1.含义:Project Object Model 项目对象模型
DOM Document Obejct Model 文档对象模型
_2.pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
5.坐标
_1.数学中的坐标:
(1)在平面上使用x,y两个向量可以唯一的定位平面中的任何一个点
(2)在空间中使用x,y,z三个向量可以唯一的定位空间的任何一个点
_2.Maven的坐标(GAV)
使用下面三个向量在仓库中唯一定位一个Maven工程
[1]groupid:公司或组织域名倒序+项目名
<groupid>com.atguigu.maven</groupid>
[2]artifactid:模块名
<artifactid>Hello</artifactid>
[3]version:版本
<version>1.0.0</version>
_3.Maven工程的坐标与仓库中路径的对应关系
com/atguigu/maven/Hello/1.0.0/Hello.1.0.0.jar
6.仓库
(1)仓库的分类
1.本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
2.远程仓库:
[1]私服:搭建在局域网中,环境下, 为当前局域网范围内的所有Maven工程服务
[2]*仓库:架设在Internet上,为全世界所有Maven工程服务
[3]*仓库镜像:为了分担*仓库的流浪,提升用户访问速度
(2)仓库中保存的内容:Maven工程
[1]Maven自身所需要的插件
[2]第三方架构或工具的jar包
[3]我们自己开发的Maven工程
生命周期
1.各个构建环节执行的顺序,不能打乱顺序,必须按照既定的正确顺序来执行
2.Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的
3.Maven的核心程序为了更好实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期的哪一个阶段,都是从这个生命周期最初的位置开始执行
依赖
依赖排除
依赖原则
1.验证路径者最短优先
2.验证路径相同时先声明者优先
统一管理依赖版本