Maven 2 概览
Maven 是一个顶级的 Apache Software Foundation 开源项目,创建它最初是为了管理 Jakarta Turbine 项目复杂的构建过程。从那以后,不论是开源开发项目还是私有开发项目都选择 Maven 作为项目构建系统。Maven 快速地发展着,如今已是第二版,Maven 已经从针对单个复杂项目的定制构建工具成长为广泛使用的构建管理系统,其丰富的功能可以应用于大多数的软件开发场景。
概括来讲,Maven 2 能够:
- 理解项目通常是如何构建的。
- 利用其内嵌的项目知识简化和便利项目构建。
- 利用其内嵌的项目知识来帮助用户理解复杂的项目结构和构建过程中潜在的变数。
- 设计并实现一个经证实的依赖项管理系统,该系统顺应了当今全球化和相互联系的项目团队的需求。
- 利用其内部知识,针对简单项目提供简单的用户体验。
- 对于高级用户来说相当灵活;针对特别的应用场景,可以覆盖其内嵌模型,也可以通过配置、部署元数据或创建自定义插件对其内嵌模型进行改写。
- 全面扩展现有行为之外的场景细节。
- 捕获新出现的最佳实践和各个用户社区间的经确认的共同性,并将它们纳入到 Maven 的内嵌项目知识中,从而不断地得到改进。
Maven 2 —— 概念性的概览
为捕捉项目构建知识,Maven 2 依赖于一套发展中的有关事物如何运转的概念性模型。部分模型被硬编码为 Maven 代码库的一部分,这些模型通过新的 Maven 发布版本不断得到精炼。图 1 解释了 Maven 2 的关键模型:
图 1. Maven 2 对象和操作模型
图 1 中的关键组件为:
-
项目对象模型(POM): POM 是 Maven 2 中的里程碑式的模型。该模型的一部分已经构建到 Maven 引擎(被亲切地称为反应堆 )中,其余部分则通过一个名叫 pom.xml 的基于 XML 的元数据文件来声明。
-
依赖项管理模型: Maven 对如何管理项目的依赖项很在行。依赖项管理是一片灰色地带,典型的构建-管理工具和系统都未明确涉及。Maven 2 构建了 Maven 依赖项管理模型,该模型能够适应大多数需求。这个模型被证明是有效而高产的模型,目前,主要的开源项目都部署了该模型。
-
构建生命周期和阶段:和 POM 相关的概念是构建生命周期 和阶段。这是 Maven 2 的内嵌概念模型和现实物理世界之间的接口。使用 Maven 时,工作主要是通过插件来执行的。在构建周期中,Maven 2 通过遵循一系列定义好的阶段,将这些插件协调起来。
如果您对其中一些概念还有点模糊,请不要担心。接下来的部分会用具体的例子来巩固这些模型背后的概念。
回页首
Maven 2 —— 物理概览
图 2 揭示了 Maven 2 的操作方式和与之交互的方式,同时显示了它的物理构成。图 2 提供了有关如何与 Maven 进行交互的概览:
图 2. Maven 2 操作和交互模型
图 2 中,POM 是 Maven 对您的特定项目的理解。这个模型由包含在一系列 pom.xml 文件中的声明性描述构成。这些 pom.xml 文件构成一棵树,每个文件能从其父文件中继承属性。Maven 2 提供一个 Super POM。这个 Super POM 位于层级树的顶端,它包含所有项目的默认通用属性;每个项目的 POM 都从这个 Super POM 处继承。
依赖项被指定为 pom.xml 文件的一部分。Maven 根据其依赖项管理模型解析项目依赖项。Maven 2 在本地存储库和全球存储库寻找依赖性组件(在 Maven 术语里称作工件 )。在远程存储库中解析的工件被下载到本地存储库中,以便使接下来的访问可以有效进行。Maven 2 中的这个依赖项解析器可以处理可递 依赖项。即,它能有效地解析您的依赖项所依赖的那些依赖项。
Maven 引擎通过插件 亲自执行几乎所有的文件处理任务。插件被配置和描述在 pom.xml 文件中。依赖项管理系统将插件当作工件来处理,并根据构建任务的需要来下载插件。每个插件都能和生命周期中的不同阶段联系起来。Maven 引擎有一个状态机,它运行在生命周期的各个阶段,在必要的时候调用插件。
分享到:
相关推荐
在本篇讨论中,我们将深入探讨如何利用OpenOffice实现PDF文件的上传预览功能,同时也会提及到一个可能用到的工具——`PDF预览JAR`。 首先,要实现PDF预览,我们需要了解OpenOffice的Java API(JODConverter)。...
这个"Android源码——二维码识别源码.7z"文件很可能是包含了一个完整的Android项目,用于演示或实现二维码识别的源代码。以下是关于Android二维码识别的一些核心知识点: 1. **ZXing(Zebra Crossing)库**: - ...
总的来说,这个“安卓Android源码——实现竖屏二维码扫描.zip”提供了学习和参考的价值,可以帮助开发者快速掌握如何在安卓应用中集成和实现竖屏模式下的二维码扫描功能。通过研究ZXingDemo01项目,开发者不仅可以...
开发技术: 后台:Springboot+springmvc+mybatis-plus 前台:VUE 运行环境: 数据库:mysql5.7+Redis JDK: 1.8 ... Maven: 3.9 ...本系统基于springboot+vue...预览:https://www.bilibili.com/video/BV1Jr4y1n7Px
Spring+Struts2+Hibernate+Easyui+Maven+Framemaker实现内容管理系统。现在可能项目比较老一些,不过还是希望能对需要的人有所帮助。 cms(内容管理系统),主要实现功能是后台能实时控制前台 适合学习/练手、毕业...
2. **表单模板**:用户可以编辑、维护、复制表单模板,更改模板类型,并预览效果。 3. **我的表单**:用户可以选择表单模板,设定表单规则,如是否允许上传图片、附件,启用富文本编辑器,以及是否挂靠流程。 4. **...
- **n^2 (Level 1):** 除了主流IDE外,还了解一些流行的工具及其替代方案,例如用于版本控制的Git、用于构建管理的Maven等。 - **n (Level 2):** 对各种开发工具和IDE都有较深的了解,能熟练运用多种工具提高开发...
1. **ZXing 库的结构与功能** - **核心组件**:ZXing库主要包含两个关键组件,一个是`Core`模块,负责条码和二维码的解码算法;另一个是`Android-Integrations`模块,专为Android平台提供了便捷的API和UI组件。 - ...
1. **自定义视图基础** 自定义视图通常涉及继承一个已有的视图类,如TextView,然后添加额外的功能或改变其默认行为。在Android中,我们通过继承`android.widget.TextView`来创建自定义的MyTextView4。 2. **重写...
- 在`build.gradle`文件中添加ZXing的依赖库,通常使用Gradle的Maven Central仓库。 - 引入对应的模块,例如`implementation 'com.google.zxing:core:3.4.1'`和`implementation '...
【JSP源码详解——永恒文章管理系统YHCMS v2.0】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发技术,它允许开发者将静态HTML与动态Java代码结合,以创建交互式Web应用。永恒文章管理系统YHCMS v2.0是...
微信开发者工具则用于调试和预览微信小程序的前端效果。 总的来说,“出行先知”微信小程序项目是一个集成了Java后端、微信小程序前端以及MySQL数据库的综合性学习案例。通过这个项目,开发者不仅可以提升Java编程...
本文将深入探讨一个基于Java开发的个人博客系统——PersonalBlog,从源码的角度解析其核心设计与实现原理。 一、项目概述 PersonalBlog是一款采用Java编程语言构建的个人博客软件,它提供了用户友好的界面和丰富的...
首先,我们需要理解LiberOffice的核心组件——OpenDocument格式。OpenDocument是国际标准的开放文档格式,LiberOffice默认使用此格式保存文件,但同时也能读写Microsoft Office的DOCX和XLSX格式。这意味着...
在SSM中,Spring还作为连接器,整合其他两个框架——Struts和MyBatis。 Struts是MVC(模型-视图-控制器)架构的一部分,主要负责处理HTTP请求并控制应用程序的流程。通过定义Action类,开发者可以定义特定的业务...
1. **iText介绍** iText是一个开源的Java库,它的官方网站为`http://itextpdf.com/`。这个库主要用于在服务器端生成PDF文档,特别适合B/S系统中的报表生成。iText允许开发者在Java代码中直接创建PDF文档,支持添加...
1. **Java**:Java是一种广泛使用的面向对象的编程语言,具有跨平台性、健壮性和安全性等特点。在本项目中,Java可能被用于后端服务的开发,处理游戏逻辑、用户交互以及数据存储等任务。 2. **软件/插件**:这里指...
本篇文章将深入探讨一个基于Java的源码项目——在线相册系统,帮助开发者理解和学习如何使用Java技术构建这样一个系统。我们将从系统设计、主要技术栈、核心功能实现等方面进行详细的解析。 一、系统设计与架构 ...
1. **学习内部实现**:了解UEditor的内部工作原理,如数据结构、算法和事件处理机制。 2. **调试与优化**:在遇到问题时,可以定位并修复源代码中的错误,提升性能。 3. **扩展功能**:根据需求,自定义或扩展...