Maven入门(二)pom.xml和核心概念
一、pom.xml文件说明
1、pom意思就是project object model。
2、pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。
3、pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的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>com.mycompany.app</groupId> <artifactId>myapp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>myapp</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>
pom.xml文件的节点元素说明:
<project> pom文件的顶级节点
<modelVersion> object model版本,对Maven2和Maven3来说,只能是4.0.0
<groupId> 项目创建组织的标识符,一般是域名的倒写
<artifactId> 定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目
<version> 当前项目的版本,SNAPSHOT,表示是快照版本,在开发中
<packaging> 打包的方式,有jar、war、ear等
<name> 项目的名称
<url> 项目的地址
<properties> 属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dependencies> 构建项目依赖的jar
其中由groupId、artifactId和version唯一的确定了一个项目坐标
二、Maven坐标
2.1、什么是坐标?
在平面几何中坐标(x,y)可以标识平面中唯一的一点。
2.2、Maven坐标主要组成
- groupId: 组织标识(包名)
- artifactId:项目名称
- version: 项目的当前版本
- packaging:项目的打包方式,最为常见的jar和war两种
<groupId>com.mycompany.app</groupId>
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
2.3、Maven为什么使用坐标?
- Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。
- 拥有了统一规范,就可以把查找工作交给机器。
三、依赖管理
3.1、依赖配置
依赖配置主要包含如下元素:
<!--添加依赖配置--> <dependencies> <!--项目要使用到junit的jar包,所以在这里添加junit的jar包的依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <!--项目要使用到Hello的jar包,所以在这里添加Hello的jar包的依赖--> <dependency> <groupId>me.gacl.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
3.2、依赖范围
依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2.test:测试依赖范围。只对于测试classpath有效
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4.runtime:运行时提供。例如:jdbc驱动
4.runtime:运行时提供。例如:jdbc驱动
3.3、传递性依赖
MakeFriends.jar直接依赖于HelloFriends.jar,而HelloFriends.jar又直接依赖于Hello.jar,那么MakeFriends.jar也依赖于Hello.jar,这就是传递性依赖,只不过这种依赖是间接依赖,如下图所示:
四、仓库管理
4.1、Maven仓库
用来统一存储所有Maven共享构建的位置就是仓库(放jar包的地方)
4.2、Maven仓库布局
根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging
4.3、仓库的分类
4.3.1、本地仓库:本机jar包的位置
每个用户只有一个本地仓库,默认是在~/.m2/repository/,~代表的是用户目录,位置可以修改
4.3.2、远程仓库
1、中央仓库:Maven默认的远程仓库,URL地址:http://search.maven.org/
2、私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
五、生命周期
5.1、何为生命周期?
Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤
5.2、Maven三大生命周期
Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:
- Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
- Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
- Site Lifecycle 生成项目报告,站点,发布站点。
六、常用命令
mvn install |
安装包至本地仓库,以备本地的其它项目作为依赖使用 |
mvn clean | 清理上一次构建生成的target文件 |
mvn compile |
编译项目的源代码 |
mvn test |
使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布 |
mvn package |
将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR |