Maven

Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(pom)的概念,Maven可以从一个中心资料片管理项目构建,报告文件。

 

Maven是什么?

Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基本建设,Maven使用标准的目录结构和默认构建生命周期。

在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

 

Maven历史

Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每个项目包含了不同的Ant构建文件。 JAR检查到CVS。

Apache组织开发Maven可以建立多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合作和帮助。

 

Maven目标

Maven的主要目标是让开发人员在最短的时间内理解开发工作的完整状态。为了实现这一目标,Maven试图处理以下几个方面的问题:

  • 使构建过程变得简单
  • 提供统一的构建系统
  • 提供优质的项目信息
  • 提供最佳实践开发指南
  • 允许透明迁移到新功能
  • 项目是可重复使用,易维护,更容易理解的一个综合模型

提供优质的项目信息

Maven提供了大量有用的项目信息,这些信息部分来自您的POM,部分来自您项目的来源。例如,Maven可以提供:

  • 更改直接从源代码管理创建的日志文档
  • 交叉引用的来源
  • 项目管理的邮件列表列表
  • 依赖列表
  • 单元测试报告包括报道

Maven的主要特点

  • 遵循最佳实践的简单项目设置 - 在几秒钟内启动新项目或模块
  • 所有项目的一致使用 - 意味着新开发人员进入项目的时间不会增加
  • 高级依赖管理,包括自动更新,依赖关闭(也称为传递依赖)
  • 能够轻松地同时处理多个项目
  • 一个庞大且不断增长的库和元数据库,可以立即使用,并与最大的开源项目安排实时可用的最新版本
  • 可扩展,能够轻松编写 Java或脚本语言的插件
  • 只需很少或不需要额外配置即可即时访问新功能
  • 用于在Maven之外进行依赖关系管理和部署的Ant任务
  • 基于模型的构建:Maven能够根据项目的元数据将任意数量的项目构建到预定义的输出类型(如JAR,WAR或分发)中,而无需在大多数情况下执行任何脚本编写。
  • 项目信息的连贯性站点:使用与构建过程相同的元数据,Maven能够生成包含您需要添加的任何文档的网站或PDF,并添加有关项目开发状态的标准报告。在“项目信息”和“项目报告”子菜单下,可以在本网站左侧导航栏的底部看到此信息的示例。
  • 发布管理和发布发布:没有太多额外配置,Maven将与您的源代码控制系统(如Subversion或Git)集成,并根据特定标记管理项目的发布。它还可以将其发布到分发位置以供其他项目使用。Maven能够发布单个输出,例如JAR,包含其他依赖关系和文档的存档,或者作为源分发。
  • 依赖管理:Maven鼓励使用JAR和其他依赖项的中央存储库。Maven附带了一种机制,您的项目客户可以使用该机制从中央JAR存储库下载构建项目所需的任何JAR,就像Perl的CPAN一样。这允许Maven的用户跨项目重用JAR并鼓励项目之间的通信,以确保处理向后兼容性问题。

什么是pom?

POM代表“项目对象模型”。它是一个名为pom.xml的文件中的Maven项目的XML表示形式在Maven人的面前,谈论一个项目是在哲学意义上讲,而不仅仅是包含代码的文件集合。项目包含配置文件,涉及的开发人员及其所扮演的角色,缺陷跟踪系统,组织和许可证,项目所在的URL,项目的依赖关系以及所有其他小部分发挥代码生命。这是项目所有事情的一站式商店。事实上,在Maven世界中,一个项目根本不需要包含任何代码,只需要一个pom.xml

  • groupId:这在组织或项目中通常是唯一的。例如,所有核心Maven工件(好吧,应该)都存在于groupId org.apache.maven下组ID不一定使用点表示法,例如junit项目。请注意,带点标记的groupId不必与项目包含的包​​结构相对应。然而,这是一个很好的做法。当存储在存储库中时,该组的行为很像操作系统中的Java打包结构。这些点由OS特定的目录分隔符(例如Unix中的“/”)替换,后者成为基本存储库的相对目录结构。在给出的示例中,org.codehaus.mojo组位于目录中$ M2_REPO / org / codehaus / mojo
  • artifactId:artifactId通常是项目所知的名称。虽然groupId很重要,但是组内的人很少会在讨论中提到groupId(它们通常都是相同的ID,例如MojoHaus项目groupId:org.codehaus.mojo)。它与groupId一起创建了一个键,将该项目与世界上的其他项目分开(至少应该:))。与groupId一起,artifactId完全定义了工件库中的工件生命区。对于上述项目,my-project位于$ M2_REPO / org / codehaus / mojo / my-project中
  • version:这是命名难题的最后一部分。groupId:artifactId表示单个项目,但它们无法描述我们正在讨论的项目的哪个版本。我们是否需要junit: 2018年(版本4.12)或2007版(版本3.8.2)?简而言之:代码更改,应该对这些更改进行版本控制,并且此元素使这些版本保持一致。它还在工件的存储库中用于将版本彼此分开。我的项目版本1.0文件存在于目录结构$ M2_REPO / org / codehaus / mojo / my-project / 1.0中

 

 

Maven基本操作

一些基本的操作,编译,构建,单元测试,安装,网站生成和基于Maven部署项目。

 

posted @ 2019-02-20 15:17  ^_^达❤令  阅读(220)  评论(0编辑  收藏  举报