Maven基础学习(一)

一、Maven概念
Maven是包括jar包管理和源码管理,程序编译三合一的优秀工具,越来越多的公司与项目开始接受并使用其作为项目构建与依赖管理工具,Apache Maven是一个基于java的apache ant的构建工具的替代者。
1、Maven是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
2、约定配置:Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则。
(一)Maven 的 Snapshot 版本与 Release 版本
1、Snapshot 版本代表不稳定、尚处于开发中的版本。
2、Release 版本则代表稳定的版本。

二、Maven 环境配置
Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。
(一)Maven下载
Maven 下载地址:http://maven.apache.org/download.cgi。

(二)设置 Maven 环境变量
 根据不同系统,添加环境变量 MAVEN_HOME。
 
三、Maven POM
 POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等。
(一)Maven执行过程
 Maven在执行任务或目标时,会在当前目录中查找并读取POM,获取所需的配置信息后,再执行目标任务。
 1、POM可以配置:
 (1)项目依赖;
 (2)插件;
 (3)执行目标;
 (4)项目构建profile;
 (5)项目版本;
 (6)项目开发者列表;
 (7)相关邮件列表信息。
 注意:POM 文件必须包含 project 元素和三个必需字段:groupId,artifactId,version。
 
(二)父(Super)POM
1、父(Super)POM是 Maven 默认的 POM。所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 包含了一些可以被继承的默认设置。
注意:当 Maven 发现需要下载 POM 中的 依赖时,它会先到 Super POM 中配置的默认仓库 http://repo1.maven.org/maven2 去下载。使开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被重写。
2、使用以下命令来查看 Super POM 默认配置:mvn help:effective-pom。
3、 Maven 在执行目标时需要用到的默认工程源码目录结构、输出目录、需要的插件、仓库和报表目录。
注意:Maven 的 pom.xml 文件也不需要手工编写。
注意:Maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。

四、Maven 构建生命周期
Maven 构建生命周期定义了一个项目构建跟发布的过程。
(一)构建应用生命周期
1、验证 validate:验证项目是否正确且所有必须信息是可用的;
2、编译 compile:源代码编译在此阶段完成;
3、测试 Test:使用适当的单元测试框架(例如JUnit)运行测试。
4、包装 package:创建JAR/WAR包如在 pom.xml 中定义提及的包;
5、检查 verify:对集成测试的结果进行检查,以保证质量达标;
6、安装 install:安装打包的项目到本地仓库,以供其他项目使用;
7、部署 deploy:拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程;

(二)Maven 有以下三个标准的生命周期:
1、clean:项目清理的处理;
2、default(或 build):项目部署的处理;
3、site:项目站点文档创建的处理;

(三)Clean 生命周期
1、当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:
(1)pre-clean:执行一些需要在clean之前完成的工作;
(2)clean:移除所有上一次构建生成的文件;
(3)post-clean:执行一些需要在clean之后立刻完成的工作;
2、如果执行 mvn clean 将运行以下两个生命周期阶段:
pre-clean, clean;
3、如果我们运行 mvn post-clean ,则运行以下三个生命周期阶段:
pre-clean, clean, post-clean;

(四)Default (Build) 生命周期
1、这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:主要包括构建应用的生命周期。

(五)Site 生命周期
1、Maven Site 插件一般用来创建新的报告文档、部署站点等。
(1)pre-site:执行一些需要在生成站点文档之前完成的工作;
(2)site:生成项目的站点文档;
(3)post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备;
(4)site-deploy:将生成的站点文档部署到特定的服务器上;
注意:这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。 

五、Maven 构建配置文件
1、构建配置文件是一系列的配置项的值,可以用来设置或者覆盖 Maven 构建默认值。使用构建配置文件,你可以为不同的环境,比如说生产环境(Producation)和开发(Development)环境,定制构建方式。
2、配置文件在 pom.xml 文件中使用 activeProfiles 或者 profiles 元素指定,并且可以通过各种方式触发。配置文件在构建时修改 POM,并且用来给参数设定不同的目标环境(比如说,开发(Development)、测试(Testing)和生产环境(Producation)中数据库服务器的地址)。

(一)构建配置文件的类型
1、构建配置文件大体上有三种类型:
(1)项目级(Per Project)    定义在项目的POM文件pom.xml中;
(2)用户级 (Per User)    定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml);
(3)全局(Global)    定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml);

(二)配置文件激活
1、Maven的构建配置文件可以通过多种方式激活。
(1)使用命令控制台输入显式激活。
(2)通过 maven 设置。
(3)基于环境变量(用户或者系统变量)。
(4)操作系统设置(比如说,Windows系列)。
(5)文件的存在或者缺失。
2、profile 可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个 profile,然后每个 profile 对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

(三)通过Maven设置激活配置文件
打开 %USER_HOME%/.m2 目录下的 settings.xml 文件,其中 %USER_HOME% 代表用户主目录。如果 setting.xml 文件不存在就直接拷贝 %M2_HOME%/conf/settings.xml 到 .m2 目录,其中 %M2_HOME% 代表 Maven 的安装目录。

(四)通过环境变量激活配置文件 
 在 pom.xml 里面的 <id> 为 test 的 <profile> 节点,加入 <activation> 节点。
 
(五)通过操作系统激活配置文件
 activation 元素包含下面的操作系统信息。例如:当系统为 windows XP 时,test Profile 将会被触发。
 
(六)通过文件的存在或者缺失激活配置文件
现在使用 activation 元素包含下面的操作系统信息。当 target/generated-sources/axistools/wsdl2java/com/companyname/group 缺失时,test Profile 将会被触发。
 
六、Maven 仓库
1、Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
注意:Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
2、Maven 仓库有三种类型:本地(local),中央(central),远程(remote)。

(一)本地仓库
1、Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。 
2、运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
3、默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
注意:Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。 

(二)中央仓库
1、Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
2、中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
注意:需要通过网络才能访问,这个仓库由 Maven 社区管理。

(三)远程仓库
如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

(四)Maven 依赖搜索顺序
1、当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

(五)Maven 阿里云(Aliyun)仓库
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。

七、Maven 插件
Maven有3个标准的生命周期clean、build和site,每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口,然后这些 phase 的实现由 Maven 的插件来完成。
注意: Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。
注意:Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。
(一)Maven 插件作用
1、创建 jar 文件;
2、创建 war 文件;
3、编译代码文件;
4、代码单元测试;
5、创建工程文档;
6、创建工程报告;
注意:插件通常提供了一个目标的集合,并且可以使用下面的语法执行:<code>mvn [plugin-name]:[goal-name]</code>。

(二)Maven 插件使用
1、插件是在 pom.xml 中使用 plugins 元素定义的。
2、每个插件可以有多个目标。
3、你可以定义阶段,插件会使用它的 phase 元素开始处理。我们已经使用了 clean 阶段。
4、你可以通过绑定到插件的目标的方式来配置要执行的任务。我们已经绑定了 echo 任务到 maven-antrun-plugin 的 run 目标。

(三)常用插件的列表
clean    构建之后清理目标文件。删除目标目录。
compiler    编译 Java 源文件。
surefile    运行 JUnit 单元测试。创建测试报告。
jar    从当前工程中构建 JAR 文件。
war    从当前工程中构建 WAR 文件。
javadoc    为工程生成 Javadoc。
antrun    从构建过程的任意一个阶段中运行一个 ant 任务的集合。

八、Maven 构建 Java 项目
Maven 使用原型 archetype 插件创建项目。要创建一个简单的 Java 应用,我们将使用 maven-archetype-quickstart 插件。
1、命令格式如下:
mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
参数说明:
-DgourpId: 组织名,公司网址的反写 + 项目名称
-DartifactId: 项目名-模块名
-DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用
-DinteractiveMode: 是否使用交互模式;

九、Maven 引入外部依赖
(一)如果我们需要引入第三库文件到项目,该怎么操作呢?
1、pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。
注意:要添加依赖项,我们一般是先在 src 文件夹下添加 lib 文件夹,然后将你工程需要的 jar 文件复制到 lib 文件夹下。
2、将依赖在 pom.xml 文件中进行配置。

十、Maven 项目模板
Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板。命令格式:mvn archetype:generate;
(一)什么是 archetype?
archetype 也就是原型,是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。
注意:Maven 的强大之处:你可以用 maven 简单的命令创建任何类型的项目,并且可以启动您的开发。

十一、Maven 项目文档
可以使用Maven命令: mvn site。
注意:Maven 使用一个名为 Doxia的文档处理引擎来创建文档,它能将多种格式的源码读取成一种通用的文档模型。要为你的项目编写文档,你可以将内容写成下面几种常用的并且可被 Doxia 转化的格式。
Apt    纯文本文档格式    http://maven.apache.org/doxia/references/apt-format.html
Xdoc    Maven 1.x 的一种文档格式    http://jakarta.apache.org/site/jakarta-site2.html
FML    FAQ 文档适用    http://maven.apache.org/doxia/references/fml-format.html
XHTML    可扩展的 HTML 文档    http://en.wikipedia.org/wiki/XHTML
 
十二、Maven 快照(SNAPSHOT)
一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。
快照就是为解决各个团队之间及时更新最新代码问题。
(一)什么是快照?
快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。
(二)项目快照 vs 版本
1、对于版本,如果 Maven 以前下载过指定的版本文件,比如说 data-service:1.0,Maven 将不会再从仓库下载新的可用的 1.0 文件。若要下载更新的代码,data-service 的版本需要升到1.1。
2、快照的情况下,每次 app-ui 团队构建他们的项目时,Maven 将自动获取最新的快照(data-service:1.0-SNAPSHOT)。
注意:你也可以在任何 maven 命令中使用 -U 参数强制 maven 现在最新的快照构建。
命令如下:mvn clean package -U。

十三、Maven 依赖管理
(一)依赖问题
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。

(二)可传递性依赖发现
Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。 
我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。
通过可传递性的依赖,所有被包含的库的图形会快速的增长。当有重复库时,可能出现的情形将会持续上升。Maven 提供一些功能来控制可传递的依赖的程度。
 
(三)依赖管理
通常情况下,在一个共通的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,我们称其为其他子项目 pom 的 pom 父。

十四、Maven 自动化部署
(一)项目开发过程中,部署的过程包含需如下步骤:
1、将所的项目代码提交到 SVN 或者代码库中并打上标签。
2、从 SVN 上下载完整的源代码。
3、构建应用。
4、存储构建输出的 WAR 或者 EAR 文件到一个常用的网络位置下。
5、从网络上获取文件并且部署文件到生产站点上。
6、更新文档并且更新应用的版本号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 学习 Maven 需要有一定的 Java 编程基础,对于 Maven 的概念和使用方式也需要有一定的了解。另外,需要了解如何编写和管理项目依赖,以及如何使用 Maven 插件等。如果你之前没有接触过 Maven,建议先了解一些基本的概念和使用方法,例如 Maven 的生命周期、坐标、仓库等。 ### 回答2: 学习Maven需要一些基础知识。首先,需要了解Java编程语言和软件开发的基本概念和原理,以便理解Maven的作用和使用方式。其次,需要熟悉命令行操作以及基本的项目管理和构建知识,这有助于更好地使用Maven进行项目构建和管理。另外,了解项目构建管理工具的基本概念和工作原理也是必要的,这样能更好地理解Maven的工作方式和特点。最后,掌握XML的基本知识也是必要的,因为Maven项目的配置文件pom.xml采用XML格式进行编写和管理。当然,对于初学者来说,这些基础知识可以通过学习和实践逐步掌握,同时也可以通过查阅相关的文档和资料来加深理解。总之,学习Maven需要一些基础知识,但通过积极学习和实践,初学者也能逐步掌握并运用好这个项目构建管理工具。 ### 回答3: 学习Maven并不需要太多的基础知识,但有一些基本的编程和项目管理概念对于理解和使用Maven是很有帮助的。 首先,对Java编程语言有一定的了解是必要的,因为Maven主要用于构建和管理Java项目。了解Java的基础语法、面向对象编程原理以及常用的Java开发工具,能更好地理解和使用Maven。 其次,对于项目管理的基本概念也是必备的。Maven是一个强大的项目管理工具,能够帮助我们自动化构建、测试、打包和部署项目。了解项目的生命周期、依赖管理、版本控制以及发布流程等概念,可以更好地理解和使用Maven的各种功能。 另外,了解一些常用的构建工具和持续集成工具也是有益的。Maven与其他构建工具(如Ant)和持续集成工具(如Jenkins)有很好的兼容性和集成性,对它们有一定的了解可以更好地搭配使用Maven进行项目构建和持续集成。 总结来说,学习Maven需要有一定的Java编程基础、项目管理概念以及对一些相关的构建和持续集成工具的了解,这样才能更好地理解和使用Maven的各种功能,提高项目管理和开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位远方的诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值