关于Maven

  一、What is Maven?

  Maven,意第绪语,意为知识的积累者,最初用于一个叫 Jakarta Turbine的项目中来简化构建过程。

  实际的项目开发中,我们需要的是——项目构建的标准方法、关于项目组成的清晰定义、发布项目信息的简单方法以及多个项目间共享jar的方法。

  这些需求推动的结果便是Maven,它可用于构建和管理基于Java的项目。

  以下来自百度百科,更通俗点:

  Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
  Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
  此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
 
  那么,Maven 和 Ant 有什么不同呢?
  在回答这个问题以前,首先要强调一点:Maven 和 Ant 针对构建问题的两个不同方面。
  Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,Maven 和 Ant代表两个差异很大的工具。

 

  二、Maven的目标

  Maven的主要目标是让开发人员在最短的时间内理解开发工作的完整状态。

  为了实现这一目标,Maven试图处理以下几个方面的问题:

  • Making the build process easy
  • Providing a uniform build system
  • Providing quality project information
  • Providing guidelines for best practices development
  • Allowing transparent migration to new features

  2.1  Making the build process easy

  虽然使用Maven并不能消除对底层机制的了解,但Maven确实提供了许多屏蔽细节的功能。

 

  2.2  Providing a uniform build system

  Maven允许使用项目对象模型(project object model, POM)和所有使用Maven的项目共享的一组插件来构建项目.

  一旦您熟悉了一个Maven项目是如何构建的,您就会自动知道所有Maven项目是如何构建的,从而在尝试应对多个项目时节省了大量时间。

  

  2.3   Providing quality project information

  Maven提供了大量有用的项目信息,这些信息一部分来自POM,一部分来自项目的源代码。

  例如,Maven可以提供:

  • Change log document created directly from source control(更改直接从源代码控件创建的日志文档)
  • Cross referenced sources (交叉引用的来源)
  • Mailing lists
  • Dependency list
  • Unit test reports including coverage(单元测试报告,包括覆盖率)

  随着Maven的改进,提供的信息集也会改进,所有这些信息集对Maven的用户都是透明的。

  其他产品还可以提供Maven插件,允许它们的项目信息集与Maven提供的一些标准信息一起使用,这些信息仍然基于POM。

 

  2.4   Providing guidelines for best practices development

  Maven的目标是为最佳实践开发收集当前的原则,并使项目更容易朝着这个方向进行指导.

  例如,规范、执行和单元测试报告是使用Maven的正常构建周期的一部分。当前的单元测试最佳实践被用作指南:

  • keeping your test source code in a separate, but parallel source tree
  • Using test case naming conventions to locate and execute tests
  • Have test cases setup their environment and don’t rely on customizing the build for test preparation.

  

  Maven还旨在协助项目工作流程,如发布和问题管理。

  Maven还建议了一些关于如何布局项目目录结构的指导原则,这样一旦您了解了布局,就可以轻松地导航使用Maven和相同缺省值的任何其他项目。

 

  2.5  Allowing transparent migration to new features

  Maven为Maven客户提供了一个简单的方法来更新他们的安装,这样他们就可以利用对Maven本身的任何更改。

  由于这个原因,从第三方或Maven本身安装新的或更新的插件变得微不足道。

 

  三、What is Maven Not?

  关于Maven,您可能听说过以下一些事情:

  • Maven is a site and documentation tool
  • Maven extends Ant to let you download dependencies
  • Maven is a set of reusable Ant scriptlets

  Maven确实可以做这些事情,正如您在“什么是Maven?”章节中读到的,但Maven不仅具有这些特性,而且它的目标也非常不同。

  

  Maven确实鼓励最佳实践,但我们意识到,出于历史原因,一些项目可能不适合当前的这些理念。

  虽然Maven是被设计得很灵活,但是在某种程度上,在这些情况下以及在不同项目的需要下,它不可能在不考虑目标完整性的情况下满足每种情况。

  如果您决定使用Maven,并且有一个不寻常的无法重新组织的构建结构,那么您可能不得不完全忘记某些特性或Maven的使用。

 

  四、Maven的主要特性

  一下是Maven的主要特性:

 

  • Simple project setup that follows best practices - get a new project or module started in seconds
  • 遵循最佳实践的简单项目设置-在几秒钟内启动一个新项目或模块

 

  • Consistent usage across all projects - means no ramp up time for new developers coming onto a project
  • 跨所有项目的一致使用——意味着新开发人员进入项目时没有时间增加

 

  • Superior dependency management including automatic updating, dependency closures (also known as transitive dependencies)
  • 高级依赖项管理,包括自动更新、依赖项闭包(也称为传递依赖项)

 

  • Able to easily work with multiple projects at the same time
  • 能够同时处理多个项目

 

  • large and growing repository of libraries and metadata to use out of the box, and arrangements in place with the largest Open Source projects for real-time availability of their latest releases
  • 一个大型且不断增长的库和元数据存储库,用于开箱即用,并与最大的开放源码项目一起安排最新版本的实时可用性

 

  • Extensible, with the ability to easily write plugins in Java or scripting languages
  • 可扩展,能够轻松地用Java或脚本语言编写插件

 

  • Instant access to new features with little or no extra configuration
  • 即时访问新功能,很少或没有额外的配置

 

  • Ant tasks for dependency management and deployment outside of Maven
  • 用于依赖关系管理和Maven外部部署的Ant任务

 

  • Model based builds: Maven is able to build any number of projects into predefined output types such as a JAR, WAR, or distribution based on metadata about the project, without the need to do any scripting in most cases.
  • 基于模型的构建:Maven能够将任意数量的项目构建为预定义的输出类型,例如基于项目元数据的JAR、WAR或分发,在大多数情况下不需要执行任何脚本。

 

  • Coherent site of project information: Using the same metadata as for the build process, Maven is able to generate a web site or PDF including any documentation you care to add, and adds to that standard reports about the state of development of the project. Examples of this information can be seen at the bottom of the left-hand navigation of this site under the "Project Information" and "Project Reports" submenus.
  • 一致的项目信息站点:使用与构建过程相同的元数据,Maven能够生成web站点或PDF,其中包括您想要添加的任何文档,并向该标准报告添加关于项目开发状态的报告。这些信息的例子可以在“项目信息”和“项目报告”子菜单下本网站左侧导航的底部看到。

 

  • Release management and distribution publication: Without much additional configuration, Maven will integrate with your source control system (such as Subversion or Git) and manage the release of a project based on a certain tag. It can also publish this to a distribution location for use by other projects. Maven is able to publish individual outputs such as a JAR, an archive including other dependencies and documentation, or as a source distribution.
  • 发布管理和发行版发布:无需太多额外配置,Maven就可以与源代码控制系统(如Subversion或Git)集成,并基于某个标记管理项目的发布。它还可以将其发布到发布位置,供其他项目使用。Maven能够发布单独的输出,例如JAR、包含其他依赖项和文档的存档,或者作为源发布。

 

  • Dependency management: Maven encourages the use of a central repository of JARs and other dependencies. Maven comes with a mechanism that your project's clients can use to download any JARs required for building your project from a central JAR repository much like Perl's CPAN. This allows users of Maven to reuse JARs across projects and encourages communication between projects to ensure that backward compatibility issues are dealt with.
  • 依赖关系管理:Maven鼓励使用jar和其他依赖关系的中央存储库。Maven提供了一种机制,您的项目客户端可以使用该机制从中央JAR存储库(非常类似于Perl的CPAN)下载构建项目所需的任何JAR。这允许Maven的用户跨项目重用jar,并鼓励项目之间的通信,以确保处理向后兼容性问题。

 

  

 

原文地址:https://www.cnblogs.com/bigbigbigo/p/10115118.html