【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~

这篇具有很好参考价值的文章主要介绍了【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~,Maven教程,maven,敏捷流程,后端,软件构建,经验分享

1️⃣ 基础概念

"Maven"可以翻译为 “知识的积累者” 或 “专家”。这个词源于波斯语,意为广受尊重和富有智慧的人。在软件开发领域中,Maven作为Apache 组织中的一个颇为成功的开源项目,它是一个非常流行的构建工具,它在项目管理、依赖管理和构建自动化方面提供了强大的功能和支持。因此,Maven 被视为软件开发过程中的权威专家,能够帮助开发团队更高效地构建和管理项目。

无论是小型的开源类库项目还是大型的企业级应用,无论是传统的瀑布式开发还是流行的敏捷模式,Maven都能展现其出色的能力。

1.1 构建

其实作为程序员,我们每天都在进行构建(build)工作。上班后的第一件事就是从源代码库中拉取最新的代码,并进行单元测试。如果测试失败,我们会与同事合作进行调试修复。然后我们继续自己的工作,编写单元测试和产品代码。

忙碌到中午,代码编写基本完成,测试也通过了,我们开心地享用午餐并稍作休息。下午开始有些困倦的时候,我们参加例会,会议结束后喝杯咖啡继续工作。刚才在会议中经理要求查看测试报告,于是我们将相关工具集成到IDE中,生成漂亮的测试覆盖率报告,然后发邮件给经理,松了口气。但QA小组又提交了几个bug,没办法,我们先在本地重现,然后熟练地用IDE生成一个WAR包,部署到Web容器中启动进行测试。一步步复现问题,最后在下班前修复了bug,提交代码并通知QA小组,愉快地结束了一天的工作。

回想一下,除了编写源代码,我们每天也花很多时间来进行编译、运行单元测试、生成文档、打包和部署等繁琐的工作,也就是构建。如果仍然依赖手工完成这些步骤,成本将会非常高。因此,有人通过使用软件方法完全自动化这一系列工作,使得软件构建像流水线一样自动进行,只需简单的一条命令,所有繁杂的步骤都能够自动完成,很快就能得到最终结果。

1.2 maven对构建的支持

上面就介绍了Maven 的用途之一是服务于构建,它是一个强大的构建工具,能够帮我们完成自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要一遍遍地输入命令, 我们要做的是使用Maven 配置好项目,然后输入简单的命令(如 mvn clean install),Maven 就会帮我们处理那些烦琐的任务。

Maven是一个跨平台的构建工具,这意味着不管是在WindowsLinux还是Mac上,我们都可以使用相同的命令进行构建。

我们一直在努力寻找避免重复的方法,包括设计、编码、文档以及构建的重复。而Maven最大程度地消除了构建过程中的重复性工作。它抽象了构建生命周期,并提供了许多已实现的插件来完成大部分构建任务。我们不再需要定义过程,甚至不需要实现其中的一些任务。举个简单的例子,对于测试来说,我们只需要按照Maven的约定编写好测试用例,当进行构建时,这些测试会自动运行,无需告诉Maven如何执行测试。

想象一下,Maven抽象了一个完整的构建生命周期模型,吸取了其他构建脚本和工具的优点,并总结了大量项目的实际需求。如果我们遵循这个模型,在很多情况下可以避免许多不必要的错误。此外,我们可以直接使用许多成熟的Maven插件来完成任务。

总的来说,Maven作为一个构建工具,具有自动化构建的能力,同时还能够提供抽象的构建过程和已实现的构建任务。它的跨平台特性以及提供一致操作接口的特点,使其成为出色且广受欢迎的构建工具。

1.3 Maven的其他作用

【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~,Maven教程,maven,敏捷流程,后端,软件构建,经验分享
图1 Maven的logo

Maven不只是一个构建工具,还是一个依赖管理及项目信息管理工具,它通过提供中央仓库来支撑开发者自动下载组件。

在当今开源的编程时代,几乎所有的Java应用都会使用一些第三方的开源类库,这些类库可以通过依赖的方式引入到项目中。然而,随着依赖的增加,就可能会出现版本不一致、版本冲突、依赖臃肿等问题。手动解决这些问题非常繁琐,但幸运的是Maven为我们提供了一个优秀的解决方案。通过依赖坐标系统,Maven能够精确定位每一个组件(比如jar文件),使类库世界变得有秩序。借助Maven,我们可以有序地管理依赖,轻松解决复杂的依赖问题。

此外,Maven还帮助我们有效管理项目中分散在各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等等。这些微小的变化可能看起来不起眼,但却在不知不觉中节省了大量查找信息的时间。除了直接的项目信息,Maven还生成网站和提供一些已有插件,使我们轻松获得有价值的项目信息,比如项目文档、测试报告、静态分析报告、源码版本日志报告等。

另外,Maven还为全球的Java开发者提供了一个免费的中央仓库,在这个仓库中几乎可以找到任何流行的开源类库。通过一些衍生工具(如Nexus),我们甚至可以快速搜索中央仓库。只要提供坐标,Maven就能自动下载所需的文件,省去了手工操作的麻烦。

最后,使用Maven还能享受一个额外的好处,即Maven为项目提供了规范的目录结构、测试用例命名方式等。只要按照这些成熟的规则进行开发,切换项目时无需额外学习,符合"约定优于配置"的原则。

2️⃣ 其他构建工具

Maven 不是Java 领域唯一的构建管理的解决方案。本节将通过一些简单的例子解释Maven的必要性,并介绍其他构建解决方案,如IDEMakeAnt, 并将它们与 Maven 进行比较。

2.1 IDE

我们不能否认优秀的集成开发环境(IDE)可以极大地提高开发效率。主流的IDEEclipseNetBeans等,提供了强大的文本编辑、调试和重构功能。尽管使用简单的文本编辑器和命令行也可以完成大部分开发工作,但很少有人愿意这样做。然而,IDE却存在一些缺陷:

  • IDE依赖繁琐的手工操作。编译、测试、代码生成等任务相互独立,很难通过一键操作来完成所有工作,手动操作效率低下;
  • 在项目中统一所有的 IDE配置是很困难的。每个开发者都有自己的配置偏好,正是由于这个原因,一个在A机器上成功运行的任务,在B机器上的 IDE中可能会失败。

因此,我们应该合理利用IDE,而不是过度依赖它。对于构建这类任务,反复点击鼠标在 IDE中操作是不够智能的行为。Maven是在这方面专业的工具,并且主流的 IDE已经集成了Maven,因此我们可以在 IDE中方便地运行Maven进行构建操作。

2.2 Make

Make可能是最早的构建工具,由Stuart Feldman于1977年在贝尔实验室创建。由于这个贡献,他在2003年获得了ACM国际计算机组织颁发的软件系统奖。目前,Make有许多衍生实现,包括最流行的GNU MakeBSD Make,还有Windows平台上的Microsoft nmake等。

Make由一个名为 Makefile的脚本文件驱动,该文件使用Make定义的自己的语法格式。它的基本组成部分包括一系列规则(Rules),每条规则包括目标(Target)、依赖(Prerequisite)和命令(Command)。Makefile的基本结构如下:

target: prerequisite
    command

Make通过一系列目标和依赖将整个构建过程串联起来,并利用本地命令完成每个目标的实际操作。它的强大之处在于可以利用各种系统的本地命令,尤其是UNIX/Linux系统,这些功能丰富且强大的命令能够帮助 Make快速高效地完成任务。

然而,Make也存在一些限制:它将自己与操作系统绑定在了一起。换句话说,使用Make很难(至少较为困难)实现跨平台构建,对于Java来说,这非常不友好。此外,Makefile的语法也经常成为问题,很多人抱怨 Make构建失败的原因往往是由于难以察觉的空格或制表符(Tab)使用错误导致的。

2.3 Ant

Ant(Another Neat Tool)是一个构建工具,最初用于构建著名的 Tomcat 服务器。它的创作动机源于James Duncan Davidson 对 Makefile语法格式的不满。我们可以将Ant 视为Java版本的 Make,正因为使用了Java,Ant是跨平台的。此外,Ant使用XML来定义构建脚本,相对于Makefile来说更加友好。

类似于MakeAnt 也有一个构建脚本 build.xml,示例如下:

<?xml version="1.0"?>
<project name="Hello"	default="compile">
	<target name="compile" description="compile the Java source code to class files">
		<mkdir dir="classes'/>
		<javac srcdir="." destdir="classes"/>
	</target>
	<target name="jar" depends="compile" description="create a Jar file">
		<jar destfile="hello,jar">
			<fileset dir="classes" includes="**/s.class"/>
			<manifest>
				<attribute name="Main-Class" value="HelloProgram"/>
			</manifest>
		</jar>
	</target>
</project>

build.xml 的基本结构包括目标(target)、依赖(depends)以及实现目标的任务。例如,在上述脚本中,jar目标用于创建应用程序的 jar文件,该目标依赖于compile目标。compile目标执行的任务是在当前目录编译Java文件并将其输出到一个名为classes的文件夹中。当compile目标完成后,jar目标接着执行自己的任务。

Ant内置了大量用Java实现的任务,这确保了它的跨平台特性。此外,Ant 还提供了特殊的exec任务用于执行本地命令。

Make 一样,Ant 也都是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行的任务。针对每一个项目,开发者都需要重新编写这一过程,这里其实隐含着很大的重复行为。 而Maven 是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现, 并且大部分插件都是现成的,开发者只需要声明项目的基本元素, Maven 就执行内置的、 完整的构建过程,这在很大程度上减少了重复性。

在过去的一段时间里,Ant 没有提供依赖管理功能,这意味着Ant用户不得不手动管理依赖关系,这是一个很麻烦的问题。幸运的是,现在Ant用户可以使用Ivy来管理依赖关系。对于Maven用户来说,依赖管理是最基本的,因为Maven内置了强大的依赖管理功能。此外,Maven还拥有一个中央仓库,可能是全世界最大的Java开源软件包集合,因此Maven用户无需进行任何配置即可直接享受依赖管理的好处。

2.4 Jenkins

【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~,Maven教程,maven,敏捷流程,后端,软件构建,经验分享
图2 Jenkins的logo

Jenkins是一个开源的自动化工具,用于构建、测试和部署软件项目。它提供了一种简单且可扩展的方式来设置和管理软件交付流程。

相比于Maven,Jenkins更加强大且灵活。通过使用Jenkins,你可以在软件开发过程中自动化执行各种任务和工作流程,并监视其执行情况。下面是一些Jenkins的核心功能:

  1. 自动化构建和持续集成:Jenkins允许你在代码提交后自动触发构建过程,并检查代码质量、运行单元测试等。这有助于减少手动操作和加快构建发布周期。

  2. 插件生态系统:Jenkins拥有丰富的插件生态系统,使你可以轻松地扩展其功能。这些插件包括与其他工具的集成、生成报告、发送通知等。例如,你可以使用Maven插件将Maven生成的结果集成到Jenkins中并展示。

  3. 流水线管理:Jenkins支持基于流水线的软件交付流程定义和管理。使用Jenkins Pipeline插件,你可以以可编程的方式定义整个交付流程,包括构建、测试、部署和回滚等步骤。

  4. 可视化报告:Jenkins能够将各个阶段的结果以图表的形式展示出来,包括构建情况、测试覆盖率、代码质量等。这使得开发人员和项目经理可以更方便地查看和分析项目的状态和趋势。

通过Jenkins,你可以实现更高效的软件交付过程,并为团队提供实时可视化的项目状态信息。它提供了一个集中化的平台,以管理和执行各种工作流程,节省了配置和维护不同工具之间的复杂性。

本专栏主要介绍Maven,那么对于同样重要的 Jenkins技术,后续我会专门做一个专栏做更详细的知识介绍,请大家持续关注。

3️⃣ Maven与敏捷开发

首先需要了解,敏捷开发(Agile Development)是一种软件开发方法理论,旨在通过迭代、协作和灵活性来应对变化的需求。它强调快速响应变更、频繁交付可工作的软件以及与客户紧密合作等核心原则。

而极限编程(Extreme Programming)则是敏捷开发中一种具体的实践方法之一,其目标是提供高质量的软件解决方案,并通过团队合作和持续反馈来增加生产效率。极限编程强调快速迭代、自动化测试、简单设计、持续集成以及面向人员的价值观等重要实践。

下面看一下 Maven 是如何适应极限编程的。

  • 简单性。Maven 暴露了一组一致且简洁的操作接口,能帮助团队成员从原来高度自定义的、复杂的构建系统中解脱出来,使用Maven 现有的成熟稳定的组件,也能简化构建系统的复杂度;
  • 交流与反馈。与版本控制系统结合后,所有人都能执行最新的构建并快速得到反馈。此外,自动生成的项目报告也能帮助成员了解项目的状态,促进团队的交流;
  • 测试驱动开发 (TDD)。TDD 强调测试先行,所有产品都应该由测试用例覆盖。而测试是Maven 生命周期的最重要的组成部分之一,并且 Maven 有现成的成熟插件支持 业界流行的测试框架,如 JUnitTestNG
  • 快速构建。快速构建强调我们能够随时快速地从源码构建出最终的产品。这正是Maven 所擅长的,只需要一些配置,之后用一条简单的命令就能让 Maven 帮你清理、编译、测试、打包、部署,然后得到最终的产品;
  • 持续集成 (CI) 。CI 强调项目以很短的周期(如15分钟)集成最新的代码。实际上, CI 的前提是源码管理系统和构建系统。流行的CI 服务器如 HudsonCruiseControl 都能很好地和 Maven 进行集成。也就是说,使用Maven 后,持续集成会变得更加方便;
  • 富有信息的工作区。强调开发者能够快速方便地了解到项目的最新状态。 当然, Maven 并不会帮你把测试覆盖率报告贴到墙上,也不会在你的工作台上放个鸭子告诉你构建失败了。不过使用Maven 发布的项目报告站点,并配置你需要的项目报告,如测试覆盖率报告,都能帮你把信息推送到开发者眼前。

上述这些实践并非只在极限编程中适用。事实上,除了其他敏捷开发方法如 SCRUM 之外,几乎任何软件开发方法都能借鉴这些实践。也就是说, Maven 几乎能够很好地支持任何软件开发方法。

例如,在传统的瀑布模型开发中,项目依次要经历需求开发、分析、设计、编码、测试和集成发布阶段。从设计和编码阶段开始,就可以使用 Maven 来建立项目的构建系统。 在设计阶段,也完全可以针对设计开发测试用例,然后再编写代码来满足这些测试用例。 然而,有了自动化构建系统,我们可以节省很多手动的测试时间。此外,尽早地使用构建系统集成团队的代码,对项目也是百利而无一害。最后, Maven 还能帮助我们快速地发布项目。

🌾 总结

本文从概念上简单地介绍了一下Maven, 通过本章我们应该能大致了解Maven 是什么以及它有什么用途。我们还将Maven 与其他流行的构建工具(如Make 和 Ant等) 做了一些对比分析。如果你没用过Maven, 但有Make 或者 Ant 的使用经验,相信通过比较你能更清楚地了解各种工具的优劣势,并且会对Maven 有一个理性的认识。

将 Maven 和敏捷开发与极限编程结合起来分析是为了让大家从另 一个角度了解Maven, 毕竞软件开发离不开对于软件过程的理解。希望大家积极理解 Maven并从中受益。


继续阅读下一篇(点击跳转)
《【Maven教程】(二)安装配置篇:手把手教你安装及配置Maven环境~》
文章来源地址https://www.toymoban.com/news/detail-650048.html

【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~,Maven教程,maven,敏捷流程,后端,软件构建,经验分享

到了这里,关于【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java Maven 构建项目里面有个聚合的概念

    Java 项目里面有个聚合的概念,它没有.net里面解决方案(solution)的能力,可以统一的编译项目下的所有包,或设置统一的打包路径,使用maven编译后的产物也不会像.net那样编译到当前项目的bin文件夹下面,而是统一的生成到配置好的 settings.xml 文件的 localRepository 配置节下的路

    2024年02月14日
    浏览(25)
  • Maven项目构建工具

    目录         1.Maven介绍                 1.1Maven是什么                 1.2为什么要使用maven         2.Maven安装                 2.1下载Maven:                 2.2解压并配置                 2.3编辑Maven环境变量               

    2024年01月20日
    浏览(31)
  • 【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

    到目前为止,已经大概了解并安装好了Maven环境, 现在,我们开始创建一个最简单的 Hello World 项目。如果你是初次接触 Maven, 建议按照本文的内容 一步步地编写代码并执行, 其中可能你会碰到一些概念暂时难以理解,但不用着急,记下这些疑难点,我在后续文章中会逐一进行

    2024年02月11日
    浏览(29)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—动态分析技术工具OllyDbg界面介绍

    目录 动态分析技术调试器 什么是OllyDbg OllyDbg能干什么 OllyDbg窗口介绍 1、反汇编面板窗口 2、信息面板窗口 3、数据面板窗口 4、寄存器面板窗口 5、栈面板窗口 动态分析技术中最重要的工具是调试器,分为用户模式和内核模式两种类型。用户模式调试器是指用来调试用户模式

    2024年02月11日
    浏览(37)
  • 【Rust教程 | 基础系列2 | Cargo工具】Cargo介绍及使用

    在编程世界中,工具的选择与使用同样重要,甚至有时候比编程语言本身更为重要。对于Rust来说,Cargo就是这样一款强大的工具。本文将详细介绍Cargo的各项功能,并通过实例演示如何使用这些功能。希望通过本文,读者能够熟练掌握Cargo的使用,从而更好地进行Rust开发。

    2024年02月15日
    浏览(46)
  • 神经网络基础-神经网络补充概念-37-其他正则化方法

    L1 正则化(Lasso Regularization):L1 正则化通过在损失函数中添加参数的绝对值之和作为惩罚项,促使部分参数变为零,实现特征选择。适用于稀疏性特征选择问题。 L2 正则化(Ridge Regularization):L2 正则化通过在损失函数中添加参数的平方和作为惩罚项,使得参数值保持较小

    2024年02月12日
    浏览(27)
  • 新一代构建工具 maven-mvnd

    maven 作为一代经典的构建工具,流行了很多年,知道现在依然是大部分Java项目的构建工具的首选;但随着项目复杂度提高,代码量及依赖库的增多使得maven在大型项目的构建的速度上被人诟病。 因此推出了gradle之类的项目,虽然gradle在构建效率是高于maven,但是在一般的小项

    2024年02月14日
    浏览(34)
  • 高效构建Java应用:Maven入门和进阶

    1.1 Maven介绍 https://maven.apache.org/what-is-maven.html Maven 是一款为 Java 项目构建管理、依赖管理的工具( 软件 ),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven就是一个软件,掌握软件安装、配置、以及基本功能**(项目构建、依赖

    2024年02月02日
    浏览(30)
  • 高效构建Java应用:Maven入门和进阶(五)

    5.1 项目需求和结构分析 需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。 项目架构: 用户服务:负责处理用户相关的逻辑,例如用户信息的管理、用户注册、登录等。 订单服务:负责处理订单相关的逻辑,例如订单的创建、订单支付

    2024年01月19日
    浏览(27)
  • 高效构建Java应用:Maven入门和进阶(二)

    2.1 梳理Maven工程GAVP属性 Maven工程相对之前的工程,多出一组gavp属性,gav需要我们在创建项目的时指定,p有默认值,后期通过配置文件修改。既然要填写的属性,我们先行了解下这组属性的含义! Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三

    2024年02月01日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包