maven学习:引入

news2024/11/17 11:32:06

       你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven——Maven 的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词语,代表专家、内行的意思。这一Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等超酷的特性,已经有无数的开源项目使用它来构建项目并促进团队交流,每天都有数以万计的开发者在访问中央仓库以获取他们需要的依赖。

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

       Maven是跨平台的,这意味着无论是在Windows上,还是在Linux或者Mac上,都可以使用同样的命令。

      我们一直在不停地寻找避免重复的方法。设计的重复、编码的重复、文档的重复,当然还有构建的重复。Maven最大化地消除了构建的重复,抽象了构建生命周期,并且为绝大部分的构建任务提供了已实现的插件,我们不再需要定义过程,甚至不需要再去实现这些过程中的一些任务。最简单的例子是测试,我们没必要告诉Maven去测试,更不需要告诉Maven如何运行测试,只需要遵循Maven的约定编写好测试用例,当我们运行构建的时候,这些测试便会自动运行。

       想象一下,Maven抽象了一个完整的构建生命周期模型,这个模型吸取了大量其他的构建脚本和构建工具的优点,总结了大量项目的实际需求。如果遵循这个模型,可以避免很多不必要的错误,可以直接使用大量成熟的Maven插件来完成我们的任务(很多时候我们可能都不知道自己在使用Maven插件)。此外,如果有非常特殊的需求,我们也可以轻松实现自己的插件。

        Maven还有一个优点,它能帮助我们标准化构建过程。在Maven之前,十个项目可能有十种构建方式;有了Maven之后,所有项目的构建命令都是简单一致的,这极大地避免了不必要的学习成本,而且有利于促进项目团队的标准化。

       综上所述,Maven作为一个构建工具,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现;它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的、流行的构建工具。Maven是跨平台的项目管理工具,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理.

        一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑.

Maven的模型:

 

Maven能解决什么问题?

       可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种 必不可少的事情要做,下面列举几个感受一下:

1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用 到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突

2、我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代 码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一个个地去编译,逗电脑玩。

3、世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

4、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型 打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗?Maven 就可以解决上面所提到的这些问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自回归滞后模型进行多变量时间序列预测

下图显示了关于不同类型葡萄酒销量的月度多元时间序列。每种葡萄酒类型都是时间序列中的一个变量。 假设要预测其中一个变量。比如,sparkling wine。如何建立一个模型来进行预测呢? 一种常见的方法是将该变量其视为单变量时间序列。这样就有很多方法可以…

【从零开始学微服务】04.微服务架构的特点

大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。 微服务架构被技术大牛们总结出了以下九个特点: 服务组件化围绕业务功能产品而不是项目强终端弱管道去中心化管理去中心化数据管理基础设施自动化容错性设计演进式设计…

Python 快速入门

文章目录Python 快速入门1 环境配置1.1 简介1.2 Python 安装1.3 其余软件1.4 编辑器的使用2 基础语法2.1 特点2.2 代码块2.3 注释3 数据类型3.1 变量类型3.2 数据结构3.3 运算符3.3.1 逻辑运算符3.3.2 比较运算符3.3.3 算术运算符3.3.4 布尔运算符4 流程语句4.1 循环语句4.1.1 …

Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)

需要全部源码或运行有问题请点赞关注收藏后评论区留言~~~ 一、通过okhttp调用HTTP接口 尽管使用HttpURLConnection能够实现大多数的网络访问操作,但是操作过于繁琐,于是Andorid从9.0是使用okhttp这个框架 由于okhttp属于第三方框架 所以使用前要修改模…

我们的程序是如何跑起来的?

1.我们写的代码写完并测试以后是如何部署给用户使用的? 1. 准备所需要的服务器 2. 在服务器上安装JDK、mysql、redis、Tomcat、Nginx等环境 3. 进行mysql、redis、nginx的连接配置 4. 项目打包。前端构建打包成功后在根目录dist文件夹中;后端打成jar包&#xff0c…

基于改进海洋捕食者算法求解单目标优化问题附matlab代码(NMPA)

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

VLAN网络支持ipv6的交换机和虚机配置

VLAN支持ipv6的交换机和虚机配置前言一、创建VLAN网络并配置交换机1.规划并在OpenStack上创建 VLAN网络2.在交换机上配置VLAN二、Ubuntu虚机配置1.创建虚机2.在OpenStack上查看port3.登录虚机配置网卡3.1登录虚机后,发现虚机没获取到openstack上对应port的ipv6地址。…

Qt编写跨平台视频监控系统(64通道占用7%CPU/支持win_linux_mac等)

一、前言 视频监控组件经历过数十年的迭代,从最初的只简单播放个rtsp视频流,到现在支持各种音频视频文件格式(mp3、wav、mp4、asf、rm、rmvb、mkv等)、支持各种视频流格式(rtp、rtsp、rtmp、http等)、支持…

10个JavaScript常见高级知识点

今天,给大家分享的是一篇干货知识《10个JavaScript常见高级知识点》,主要针对初级前端和想要面试找工作的同学,想要学好前端,除了要掌握JavaScript的基础知识外,还需要掌握一些高级的知识点。 学会了下面这些常见的高…

鼠标经过图片在边框内放大动效

鼠标没有经过: 鼠标经过的时候,看图,应该可以看出变化吧!图有放大的效果。 样式:图片由一个盒子包着,盒子加上overflow:hidden的样式,即可以保证图片在边框内放大。 然后给图片加上动画效果就可…

JavaWeb开发之——数据库设计(20)

一 概述 数据库设计-简介数据库设计-多表关系实现数据库设计-案例 二 数据库设计-简介 2.1 软件的研发步骤 2.2 数据库设计概念 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS(Database Management System-数据库管理系统),为这个业务系…

运动哪种耳机好用,推荐五款适合运动的耳机分享

​经常佩戴耳机的小伙伴都知晓传统的蓝牙耳机相对于有线耳机来说比较方便,但也存在着耳道一直堵塞导致细菌的滋生等因素的存在,但在近些年火热的骨传导耳机却能够将这些问题一一化解,基本可以说是百利而无一害,所以今天我就给小伙…

第一章 计算机系统体系结构

1.1 什么是计算机体系结构 本章的第一个概念是计算机系统(computer system)。 计算机系统包括读取并执行程序的 中央处理单元(CPU, 保存程序和数据的存储器以及将芯片转换为实用系统的 其他子系统。 这些子系统会使CPU与显示器、打印机、Internet等外部设备之间的…

【优化求解】整数规划求解机票超售优化赔付问题【含Matlab源码 2182期】

⛄一、问题 A航空公司每天有6班航班从上海到北京,从上午10点到晚上8点,每两小时发一班航班。某天获知,前三班机每班可以容纳100名旅客,后三班机每班可以容纳150名旅客。如果某次航班超售,A航空公司可以把某预定了该次…

【JSP/Servlet】基于WEB的通讯录系统

巩固JSP/Servlet系统开发描述步骤系统功能描述一、创建一个登录页面二、模拟数据(用数据库模拟用户名和密码还有用户的通讯录)三、创建一个JDBC工具类四、判断在登录页面输入的用户名和密码是否正确五、利用cookie实现保存六、以表格形式显示出我的通讯录…

2022最新MySQL面试题-有详细完整的答案解析

MySQL专题面试题 MySQL中有哪些存储引擎? InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,应该优先考虑InnoDB引擎。 MylSAM存储引擎 在MySQL 5.1及之前的…

操作简单的BI数据分析软件有哪些?实际体验如何?

使用者没有IT基础,不懂代码,又需要对大量复杂的数据进行深度分析;分析效率要高;报表要直观易理解;最好能让每个浏览者都自己动手做分析。现在市面上,能够满足这些要求的BI数据分析软件有哪些?实…

一文速通MybatisPlus

目录 Mybatis-plus简介 MP特性 框架的结构 MP快速入门 配置日志输出 主键生成策略 自动填充 方式一:数据库级别 方式二:代码控制级别(常用) 乐观锁和悲观锁 测试乐观锁单线程成功的例子 乐观锁多线程失败案例 查询操作 分页查询 删除操作 删除…

C++ 手动实现单向循环链表(课后作业版)

单向循环链表&#xff0c;并实现增删查改等功能 首先定义节点类&#xff0c;类成员包含当前节点的值&#xff0c; 指向下一个节点的指针 循环链表的尾节点指向头节点 节点定义&#xff1a; //node definition template <typename T> class Node { public:T value;Nod…

Vue的生命周期快速入门

图示 流程 new Vue()实例化一个vue实例&#xff0c;然后init初始化event 和 lifecycle&#xff0c; 其实这个过程中分别调用了3个初始化函数&#xff08;initLifecycle(), initEvents(), initRender()&#xff09;&#xff0c;分别初始化了生命周期&#xff0c;事件以及定义cr…