Maven 用于Java 平台的项目构建、依赖管理和项目信息管理。
Maven 要负责项目的自动化构建,以编译为例,Maven 要想自动进行编译,那么它必须知道 Java 的源文件保存在哪里,这样约定之后,不用我们手动指定位置,Maven 能知道位置,从而帮我们完成自动编译。
Maven 常用命令
mvn clean :清除项目目录中的生成结果。
mvn compile :编译源代码。
mvn package :根据项目生成的 jar/war 等。
mvn install :在本地 Repository 中安装 jar 。
mvn tomcat:run :启动 Tomcat 服务。
Maven 坐标的含义?
<!-- FROM https://github.com/junit-team/junit4/blob/master/pom.xml -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-BETA</version>
groupId :定义当前 Maven 项目隶属的实际项目。
artifactId :该元素定义当前实际项目中的一个 Maven 项目(模块)。推荐的做法是使用实际项目名称作为 artifactId 的前缀。比如上例中的 junit ,junit 就是实际的项目名称,方便而且直观。
version :该元素定义了使用构件的版本。
packaging 是可选的打包方式。(默认为 jar )。
多模块的聚合
对于一个多模块项目的项目依赖的版本的管理,可以通过在父模块中声明 和, 然后让子模块通过元素指定父模块,这样子模块在定义依赖是就可以只定义 groupId 和 artifactId,自动使用父模块的 version ,这样统一整个项目的依赖的版本。(继承的方式。)
Maven 依赖原则
1、赖路径最短优先原则。
一个项目 Demo 依赖了两个 jar 包,其中 A-B-C-X(1.0) , A-D-X(2.0) 。由于 X(2.0) 路径最短,所以项目使用的是 X(2.0) 。
2、pom文件中申明顺序优先。
如果 A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,Maven 会根据 pom 文件声明的顺序加载,
如果先声明了B,后声明了C ,那就最后的依赖就会是 X(1.0) 。
3、覆写优先
子 pom 内声明的优先于父 pom 中的依赖。
Maven 插件
Maven生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。插件通常提供了一个目标的集合,并且可以使用下面的语法执行:mvn [plugin-name]:[goal-name]
Maven 提供了下面两种类型的插件:
Build plugins :在构建时执行,并在 pom.xml 的 元素中配置。
Reporting plugins :在网站生成过程中执行,并在 pom.xml 的元素中配置。
下面是一些常用插件的列表:
clean :构建之后清理目标文件。删除目标目录。
compiler :编译 Java 源文件。
surefile :运行 JUnit 单元测试。创建测试报告。
jar :从当前工程中构建 JAR 文件。
war :从当前工程中构建 WAR 文件。
javadoc :为工程生成 Javadoc 。
antrun :从构建过程的任意一个阶段中运行一个 ant 任务的集合。