构建工具Maven一之初识Maven
Java项目中有三大构建工具:Ant、Maven和Gradle。经过时间的推移,Ant已经消声灭迹,以前做Android 开发对Gradle比较熟悉,以前就对Maven有一定的了解。同是构建工具,
对比起来Gradle相比Maven来说比较灵活,基于Groovy的脚本,让自由度更高。Maven则在大多数情况下不需要进行扩展,
pom.xml(Project Object Model)
- 它是Maven中工作的基本单位,这是一个XML文件。它始终保存在该项目基本目录中的pom.xml文件。
- 每个项目只有一个POM文件
Dependency(依赖管理)
- 传统的方式
- 访问 http://logging.apache.org/log4j/,下载 Log4 j的 jar 库
- 复制 jar 到项目类路径,手动将其包含到项目的依赖
Maven的方式
你需要知道 log4j 的 Maven 坐标,它会自动下载 log4j 的1.2.14 版本库。如果“version”标签被忽略,它会自动升级库时当有新的版本时
1
2
3<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>声明 Maven 的坐标转换成 pom.xml 文件。
1
2
3
4
5
6
7<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库
Coordinates(坐标)
标记产品(软件提供商(log,jackson等产品))在仓库(Maven)的坐标位置。
举个栗子,一个项目,他的包结构路径为:com.rocka.panda;一般会将groupId设置为
节点 | 描述 | 是否必须 |
---|---|---|
groupId | 这是项目组的编号,这在组织或项目中通常是独一无二的,有点类似于包名。这里就是com.rocka | 必填 |
artifactId | 这是项目的ID。这通常是项目的名称,所以这里就是panda | 必填 |
version | 这是项目的版本。与groupId一起使用 | 非必须 |
packaging | 项目打包类型,是pom、jar、war的那种类型,默认是jar | 非必须 |
Maven本地库
Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹。很简单,当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。
- Mac的本地库地址为:/Users/Rocka/.m2
- Windows的本地库地址为:C:\Documents and Settings\Rocka.m2
Maven远程库
当你导入一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – http://repo1.maven.org/maven2/ 查找下载。
Maven 依赖搜索序列
当我们执行 Maven 构建命令,Maven 依赖库按以下顺序进行搜索:
- 搜索依赖本地资源库,如果没有找到,跳到第2步,否则,如果找到那么会做进一步处理。
- 搜索依赖中央存储库,如果没有找到,则从远程资源库/存储库中,然后移动到步骤4,否则如果找到,那么它下载到本地存储库中,以备将来参考使用。
- 如果没有提到远程仓库,Maven 则会停止处理并抛出错误(找不到依赖库)。
- 远程仓库或储存库中的搜索依赖,如果找到它会下载到本地资源库以供将来参考使用,否则 Maven 停止处理并抛出错误(找不到依赖库)。
Maven 构建项目
当你运行“mvn package”命令,它会编译源代码,运行单元测试和包装这取决于在pom.xml文件的“packaging”标签。
- “packaging” = jar, 将您的项目打包成一个“jar”文件,并把它变成你的目标文件夹
- “packaging” = war,将您的项目打包成“war”文件,并把它变成目标文件夹。
Maven 清理项目
当“mvn clean”执行,在“target”文件夹中的一切都将被删除。
部署进行生产
要部署您的项目进行生产,它总是建议使用 “mvn clean package“, 以确保始终获得最新的部署。