当前位置: 首页 > news >正文

Maven 简介及其核心概念

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。
官网: Introduction – Maven
下载地址: Download Apache Maven – Maven

1 Introduction

Maven, a  Yiddish word meaning  accumulator of knowledge, began as an attempt to simplify the build processes in the Jakarta Turbine project. There were several projects, each with their own Ant build files, that were all slightly different. JARs were checked into CVS. We wanted a standard way to build the projects, a clear definition of what the project consisted of, an easy way to publish project information, and a way to share JARs across several projects.
The result is a tool that can now be used for building and managing any Java-based project. We hope that we have created something that will make the day-to-day work of Java developers easier and generally help with the comprehension of any Java-based project.

1 介绍

Maven,一种意第绪语,意为知识累积,最初是为了简化Jakarta Turbine项目中的构建过程。有几个项目,每个项目都有自己的Ant构建文件,都略有不同。JARs被检查为CVS。我们想要一种构建项目的标准方法,对项目组成的内容的明确定义,发布项目信息的简便方法以及一种在几个项目中共享JARS的方法。结果是现在可以用于构建和管理任何基于Java的项目的工具。我们希望我们创造了一些东西,可以使Java开发人员的日常工作变得更加容易,并且通常有助于理解任何基于Java的项目。

2 Maven's Objectives

Maven's primary goal is to allow a developer to comprehend the complete state of a development effort in the shortest period of time. In order to attain this goal, Maven deals with several areas of concern:
  • Making the build process easy
  • Providing a uniform build system
  • Providing quality project information
  • Encouraging better development practices

2 Maven的目标

Maven的主要目标是允许开发人员在最短的时间内理解开发工作的完整状态。为了实现这一目标,Maven处理了几个关注的领域:
- 使构建过程变得容易
- 提供统一的构建系统
- 提供优质的项目信息
- 鼓励更好的开发实践

2.1 Making the build process easy

While using Maven doesn't eliminate the need to know about the underlying mechanisms, Maven does shield developers from many details.

2.1 在使用Maven的同时使构建过程变得容易

在使用Maven时并不能消除对基本机制的了解,Maven确实将开发人员避免了许多细节。

2.2 Providing a uniform build system

Maven builds a project using its project object model (POM) and a set of plugins. Once you familiarize yourself with one Maven project, you know how all Maven projects build. This saves time when navigating many projects.

2.2 提供统一的构建系统

Maven使用其项目对象模型(POM)和一组插件来构建项目。一旦您熟悉一个Maven项目,您就会知道所有Maven项目是如何构建的。这节省了许多项目时的时间。

2.3 Providing quality project information

Maven provides useful project information that is in part taken from your POM and in part generated from your project's sources. For example, Maven can provide:
  • Change log created directly from source control
  • Cross referenced sources
  • Mailing lists managed by the project
  • Dependencies used by the project
  • Unit test reports including coverage
Third party code analysis products also provide Maven plugins that add their reports to the standard information given by Maven.

2.3 提供高质量的项目信息

Maven提供了有用的项目信息,部分是从您的POM中获得的,部分是由您的项目来源产生的。例如,Maven可以提供:更改日志直接从源控制交叉引用的邮件来源邮件列表由项目单元测试报告所使用的项目依赖项管理的邮件列表,包括覆盖范围第三方代码分析产品还提供了Maven插件,这些插件将其报告添加到MAVEN提供的标准信息中。

2.4 Providing guidelines for best practices development

Maven aims to gather current principles for best practices development and make it easy to guide a project in that direction.
For example, specification, execution, and reporting of unit tests are part of the normal build cycle using Maven. Current unit testing best practices were used as guidelines:
  • Keeping test source code in a separate, but parallel source tree
  • Using test case naming conventions to locate and execute tests
  • Having test cases setup their environment instead of customizing the build for test preparation
Maven also assists in project workflow such as release and issue management.
Maven also suggests some guidelines on how to layout your project's directory structure. Once you learn the layout, you can easily navigate other projects that use Maven.
While Maven takes an opinionated approach to project layout, some projects may not fit with this structure for historical reasons. While Maven is designed to be flexible to the needs of different projects, it cannot cater to every situation without compromising its objectives.
If your project has an unusual build structure that cannot be reorganized, you may have to forgo some features or the use of Maven altogether.

2.4 提供最佳实践开发指南

Maven旨在收集最佳实践开发原则,并使指导项目朝着该方向指导。例如,单位测试的规范,执行和报告是使用Maven的正常构建周期的一部分。当前的单元测试最佳实践用作指南:使用测试案例命名约定将测试源代码保存在单独但并行的源树中,以定位和执行测试案例设置其环境的测试,而不是自定义测试构建准备工作,以进行测试准备工作。 Maven还建议一些有关如何布局项目目录结构的指南。一旦学习了布局,就可以轻松地浏览使用Maven的其他项目。尽管Maven采用了一种自以为是的方法来进行项目布局,但出于历史原因,某些项目可能不符合这种结构。而Maven的设计是为了满足不同的需求

3 What is Maven Not?

You might have heard some of the following things about Maven:
  • Maven is a site and documentation tool
  • Maven extends Ant to let you download dependencies
  • Maven is a set of reusable Ant scriptlets
While Maven does these things, as you can read above in the “What is Maven?” section, these are not the only features Maven has, and its objectives are quite different.

3 什么不是Maven?

您可能已经听到了有关Maven的以下一些信息:
- Maven是一个网站和文档工具
- Maven扩展了Ant,让您下载依赖项
- Maven是一组可重复使用的Ant脚本,
而Maven会做这些事情,就像您可以在“什么是Maven?”中阅读的那部分,这些不是Maven具有的唯一功能,其目标是完全不同的。

4 什么是构建?

构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
构建过程的几个主要环节
①清理 :删除以前的编译结果,为重新编译做好准备。
②编译 :将 Java 源程序编译为字节码文件。
③测试 :针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告 :在每一次测试后以标准的格式记录和展示测试结果。
⑤打包 :将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
⑥安装 :在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
⑦部署 :将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

5 Maven 核心概念

Maven 能够实现自动化构建是和它的内部原理分不开的,Maven 有八个核心概念:
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库
⑥生命周期/插件/目标
⑦继承
⑧聚合
这里着重讲讲继承和聚合:

5.7 继承

多个子工程中依赖同样的jar包,但是采用test范围;由于test范围没有传递性;所以,每一个工程都需要对test范围的jar包进行单独依赖;
而如果希望修改多个工程中所依赖test范围的jar包版本,那么,一个一个项目去修改太麻烦,这时可以应用继承解决。
继承的使用:
(1)定义一个父工程,父工程packaging必须是pom
pom
项目的打包类型:pom、jar、war
packing默认是jar类型

5.8 聚合(一键安装)

聚合:
如果有多个工程需要安装,一个一个工程进行安装,太麻烦了;可以利用聚合,将多个工程管理起来,实现一键安装。
(也就是将一个父工程进行安装,其他被聚合的工程也同时进行安装)
①在父工程中定义modules标签
../Hello
../HelloFriend
../MakeFriend

6 Maven生命周期

Maven的生命周期就是对所有的构建过程进行统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署等几乎所有的构建步骤。

6.1 依赖范围

6.1.1 说明
maven的依赖范围主要是对标签中的标签中的值的设置; scope的默认依赖范围是compile;
6.1.2 常用的依赖范围有以下三种:
compile
test
provide
主要从 对主程序是否有效、对测试程序是否有效、是否参与打包与部署三个方面对比以上三种依赖范围。

7 Nexus

Nexus 的全称是 Nexus Repository Manager(Nexus 仓库管理器),是 Sonatype 公司的一个产品。Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。

7.1. Nexus 仓库分类

Nexus 仓库按照类型(Type)区分,主要分为以下 3 个类型:
  • 代理仓库(proxy):用来代理远程公共仓库,如 Maven 中央仓库。
  • 宿主仓库(hosted):又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。
  • 仓库组(group):用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。
为了更加直观的理解仓库组、代理仓库和宿主仓库的概念,我们通过下图展示它们的用途和区别。
由上图可知:
Maven 可以直接从宿主仓库中下载构件。
Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。

7.2 Nexus安装和使用

nexus的下载链接为: https://download.csdn.net/download/qq_34091529/87967563
链接中包含Nexus 2.x 和 Nexus 3.x 两个版本,直接破解使用即可;
目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,它们是并行的关系,目前使用最多,运行最稳定的是 Nexus 2.x

http://www.mrgr.cn/news/95400.html

相关文章:

  • Java 大视界 -- Java 大数据在智能医疗远程会诊与专家协作中的技术支持(146)
  • 【多线程】线程安全集合类,ConcurrentHashMap实现原理
  • STM32 - 在机器人领域,LL库相比HAL优势明显
  • 区块链交易
  • MFC中CString类型是如何怎么转std::string的
  • 1.8 函数的连续性和间断点
  • 基于 FPGA的HLS技术与应用
  • 可发1区的超级创新思路:基于注意力机制的DSD-CNN时间序列预测模型(功率预测、交通流量预测、故障检测)
  • VLAN综合实验报告
  • Mybatis—01
  • C 语 言 --- 操 作 符 2
  • 第十五次CCF-CSP认证(含C++源码)
  • 【蓝桥杯—单片机】IAP15F2K61S2专项 | 真题整理、解析与拓展 | 省赛题(更新ing...)
  • 【C++指南】内存管理完全手册:new/delete
  • 【MySQL】索引
  • 二分查找上下界问题的思考
  • 第一讲 | 解锁C++编程能力:基础语法解析
  • java使用Apache POI 操作word文档
  • 【STM32】SPI通信协议W25Q64Flash存储器芯片(学习笔记)
  • 【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)