了解Maven
概述
第1章 Maven 简介
第2章 Maven 的安装和配置
Mac 下直接 brew install maven
,升级也很简单 brew upgrade maven
,查询 Maven 的版本用 mvn- v
。
设置代理
|
|
settings.xml 文件非常重要,可以从 M2_HOME/conf/settings.xml 复制。
第3章 Maven 使用入门
项目的主代码会被打包到最终的构件中,如 jar,而测试代码只在运行测试的时候用到,不会被打包。默认情况下,Maven 假设项目主代码位于 src/main/java。
编译的命令 mvn clean compile
clean
会告诉 Maven 清理输出目录 target/,compile 告诉 Maven 编译项目主代码。
主类就算在 jar 里面也是不能直接运行的,因为带有 main 方法的类信息不会添加到 manifest 中。为了可以生产可执行的 jar 文件,需要借助 maven-shape-plugin 插件。然后运行 java-jar
命令运行该 jar 包。
第5章 坐标和依赖
Maven 的一大功能是管理项目的依赖。为了自动化解析任何一个 Java 构件,就必须为它们唯一标识,这就是依赖管理的底层基础。
groupId
不对应实际项目,一般定义当前 Maven 项目隶属的实际项目。
artifactId
定义实际项目中的一个 Maven 项目或者模块。默认情况下,Maven 生成的构件,其文件名会以 artifactId 作为开头。如:recall-0.1.0.jar
version
定义 Maven 项目当前所处的版本。
packing
定义 Maven 项目的打包方式。
classifier
帮助定义构建输出的一些附属构件。附属构件与主构件对应。packing 是可选的,classifier 是不能直接定义的。
依赖的配置
依赖的范围
依赖范围是用来库功能之依赖与三种 classpath,编译、测试、运行的关系。
第6章 仓库
对于 Maven 来说,仓库只分为本地和远程。默认会先查看本地仓库,再到远程仓库。 存放本地仓库的地址可以通过更改 setting.xml 中的 localRepository。 远程仓库除了 Maven 的 repo 还有 JBoss Maven 等等。基本上只要配置一下 url 即可。
在 Maven 的世界里,任何一个项目或者构件都必须有自己的版本。不管是正式还是快照版本。快照版本一定程度上可以避免对版本号的滥用。在发布过程中 Maven 会自动为构件打上时间戳。默认情况下,Maven 会主动每天更新一次,也可以通过配置仓库的 updatePolicy 控制。用户也可以使用命令 -U 参数强制让 Maven 检查更新,如 mvn clean install-U
。
如果仓库 X 能够提供仓库 Y 存储的所有内容,那么认为 X 是 Y 的一个镜像。任何一个从仓库 Y 获得的构建,都能从它的镜像中获取。一般常见的实践是镜像结合私服,由于私服可以代理任何外部的公共仓库(包括中央仓库),因此对于组织内部的 Maven 用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化 Maven 本身的配置。
第7章 生命周期和插件
生命周期包括了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。Maven 拥有三套相互独立的生命周期,分别是 clean, default, site
。每个生命周期包含一些阶段。
clean生命周期
pre-clean 执行一些清理前需要完成的工作 clean 清理上一次构建生成的文件 post-clean 执行一些清理后需要完成的工作
default生命周期
定义了真正构建时所需要执行的所有步骤。是所有生命周期中最核心的部分,包含了常用的 test, package, install, deploy 等阶段。
site生命周期
建立和发布项目站点,基于 POM 所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。 pre-site 执行一些在生成项目站点之前需要完成的工作 site 生成项目站点文档 post-site 执行一些在生成项目站点之后需要完成的工作 site-deploy 将生成的项目站点发布到服务器上
命令行是最主要的方式调用生命周期阶段。各个生命周期相互独立,但是阶段之间是前后依赖的。 Maven 的核心仅仅是定义了抽象的生命周期,具体的任务是交由插件完成的,插件以独立的构件形式存在。除了内置绑定方式,还有自定义的方式,这种绑定方式能让 Maven 项目在构建过程中执行更多更富有特色的任务。
常见例子是创建项目的源码 jar 包,内置的插件绑定关系中并没有涉及这个任务,需要用户自行配置,maven-source-plugin,他的 jar-no-fork 目标能够将项目的主代码打成 jar 文件。可以将其绑定到 default 生命周期的 verify 阶段,在执行完集成测试后和安装构件之前创建源码 jar 包。
完成了插件和生命周期的绑定之后,还可以配置插件目标的参数,进一步调整插件目标所执行的任务,以满足项目需求。