Maven-构建工具

一、背景

开发者编写完成源码,还需要进行编译、测试、打包、部署等一系列操作。在一些小型项目中,还可能通过手动方式进行以上操作。但是在大型项目中,难以确定以上操作的顺序,而且会耗费更高的时间成本。

1.构建工具

构建工具就是把一个源码通过编译、连接、打包、测试、部署等一系列操作生成可执行应用程序的一个自动化过程。

2.功能

构建工具主要功能为下载依赖、编译可执行文件、进行测试、部署到服务器等。

3.常用构建工具

Ant:命令式的软件构建工具,对于项目结构没有约束。
Maven:基于XML配置文件的构建工具,使用中央仓库来管理项目依赖。采用约定优于配置的方式,全量式构建、具有强大的依赖管理和插件拓展能力。
Gradle:基于Groovy脚本语言的构建工具,具有更强可读性和可维护性。使用增量式构建,缩短构建时间。也支持依赖管理和插件拓展能力。

二、Maven概述

1.定义

Maven是一个软件工程的项目管理工具,基于工程对象模型(POM)。Maven可以依据统一的模版对项目进行构建、生成报告和文档等操作。

2.优势

2.1 约定大于配置,方便开发者最短时间内完成项目开发。
2.2 项目结构使用统一的POM模型,提供统一的构建系统
2.3 构建过程更简单
2.4 可提供项目单元测试报告、项目依赖列表等项目信息
2.5 提供最佳开发实践指南

3.缺点

3.1 maven相对比较庞大,掌握比较困难
3.2 maven采用全量构建,如果项目比较大构建时间会比较长
3.3 首次导入项目加载所需依赖可能花费时间较长

三、Maven架构

1.架构图

在这里插入图片描述
主要包括依赖管理、构建生命周期、插件拓展、项目统一模型POM等。主要工作流程如下:
1.1 根据Pom中配置 从本地仓库或者中央仓库 拉取项目直接依赖或间接依赖的jar包等
1.2 对代码进行编译和连接
1.3 对编译后代码进行单元测试和验证
1.4 进行本地打包或者部署到本地仓库或中央仓库

2.项目统一模型POM

POM是maven中基本的单元,以pom.xml形式在项目目录中。Pom包含项目的信息和依赖信息以及Maven用于构建项目的各种配置信息、目标、插件等。

3.依赖管理

项目中除了开发者的源码还会使用一些外部库,外部库是以jar包的形式存储在中央仓库中。maven主要负责将直接依赖项和间接依赖项下载并解决版本冲突等问题。

4.构建生命周期

maven根据构建目的划分了三个标准的构建周期,并且每个周期都有固定的阶段。maven提供了一些内置的pulgin来实现相应的功能,开发者也可以自定义pulgin并绑定到某些阶段。

总结

这里主要是对maven构建工具背景、主要功能和整体架构进行一个初步了解,接下来会对maven的每个功能进行详细的了解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

必看!玩转Salesforce沙盒的5个实用技巧

定期刷新沙盒对于尝试最新版本的功能,以及防止在生产组织的环境中缺乏测试而导致开发工作回滚至关重要。 为了确保沙盒设置在刷新后顺利进行,需要考虑几个因素。首先,确保有完善的文档化流程。文档应分为Conga、DocuSign、数据(C…

双通道 H 桥电机驱动芯片AT8833,软硬件兼容替代DRV8833,应用玩具、打印机等应用

上期小编给大家分享了单通道 H 桥电机驱动芯片,现在来讲一讲双通道的驱动芯片。 双通道 H 桥电机驱动芯片能通过控制电机的正反转、速度和停止等功能,实现对电机的精确控制。下面介绍双通道H桥电机驱动芯片的工作原理和特点。 一、工作原理 双通道 H 桥电…

【题解】2023 DTS算法竞赛集训 第1次

比赛地址&#xff1a;https://www.luogu.com.cn/contest/143650 P1319 压缩技术 https://www.luogu.com.cn/problem/P1319 简单的签到模拟题 #include <iostream>//c标准库 using namespace std; int main(){int a,n,t0,i0,b,s0;//t判断有没有回车&#xff0c;i判断输…

初识rust

调试下rust 的执行流程 参考&#xff1a; 认识 Cargo - Rust语言圣经(Rust Course) 新建一个hello world 程序&#xff1a; fn main() {println!("Hello, world!"); }用IDA 打开exe&#xff0c;并加载符号&#xff1a; 根据字符串找到主程序入口&#xff1a; 双击…

MySQL进阶之性能优化与调优技巧

数据库开发-MySQL 1. 多表查询1.1 概述1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2 结构3.3 语法 1. 多表查询 1.1 概述 1.1.2 介绍…

云计算的大模型之争,亚马逊云科技落后了?

文丨智能相对论 作者丨沈浪 “OpenAI使用了Azure的智能云服务”——在过去的半年&#xff0c;这几乎成为了微软智能云最好的广告词。 正所谓“水涨船高”&#xff0c;凭借OpenAI旗下的ChatGPT在全球范围内爆发&#xff0c;微软趁势拉了一波自家的云计算业务。2023年二季度&a…

个人和企业如何做跨境电商?用API电商接口教你选平台选品决胜跨境电商

当下是跨境电商快速发展的阶段&#xff0c;在未来将会朝向成熟系统化的方向发展&#xff0c;对于跨境电商从业者来说既是机遇&#xff0c;也是挑战。那么&#xff0c;个人做跨境电商的核心要素是什么&#xff1f;又该如何去做&#xff1f;对此&#xff0c;小编总结以下四大核心…

【C/C++】什么是POD(Plain Old Data)类型

2023年11月6日&#xff0c;周一下午 目录 POD类型的定义标量类型POD类型的特点POD类型的例子整数类型&#xff1a;C 风格的结构体&#xff1a;数组&#xff1a;C 风格的字符串&#xff1a;std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中&#xff0c;并从文…

3.Netty中Channel通道概述

Selector 模型 Java NIO 是基于 Selector 模型来实现非阻塞的 I/O。Netty 底层是基于 Java NIO 实现的&#xff0c;因此也使用了 Selector 模型。 Selector 模型解决了传统的阻塞 I/O 编程一个客户端一个线程的问题。Selector 提供了一种机制&#xff0c;用于监视一个或多个 …

Java2 - 数据结构

5 数据类型 5.1 整数类型 在Java中&#xff0c;数据类型用于定义变量或表达式可以存储的数据的类型。Java的数据类型可分为两大类&#xff1a;基本数据类型和引用数据类型。 byte&#xff0c;字节 【1字节】表示范围&#xff1a;-128 ~ 127 即&#xff1a;-2^7 ~ 2^7 -1 sho…

第二章:人工智能深度学习教程-深度学习简介

深度学习是基于人工神经网络的机器学习的一个分支。它能够学习数据中的复杂模式和关系。在深度学习中&#xff0c;我们不需要显式地对所有内容进行编程。近年来&#xff0c;由于处理能力的进步和大型数据集的可用性&#xff0c;它变得越来越流行。因为它基于人工神经网络&#…

mac装不了python3.7.6

今天发现一个很奇怪的问题 但是我一换成 conda create -n DCA python3.8.12就是成功的 这个就很奇怪

【ElasticSearch系列-04】ElasticSearch的聚合查询操作

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

【机器学习3】有监督学习经典分类算法

1 支持向量机 在现实世界的机器学习领域&#xff0c; SVM涵盖了各个方面的知识&#xff0c; 也是面试题目中常见的基础模型。 SVM的分类结果仅依赖于支持向量&#xff0c;对于任意线性可分的两组点&#xff0c;它 们在SVM分类的超平面上的投影都是线性不可分的。 2逻辑回归 …

#龙迅视频转换IC LT7911D是一款高性能Type-C/DP/EDP 转MIPI®DSI/CSI/LVDS 芯片,适用于VR/显示应用。

1.说明 应用功能&#xff1a;LT7911D适用于DP1.2转MIPIDSI/MIPICSI/LVDS&#xff0c;EDP转MIPIDSI/MIPICSI/LVDS&#xff0c;TYPE-C转MIPIDSI/MIPICSI/LVDS应用方案 分辨率&#xff1a;单PORT高达4K30HZ&#xff0c;双PORT高达4K 60HZ 工作温度范围&#xff1a;−40C to 85C 产…

Linux--进程间通信

1.进程间通信 进程间通信的背景&#xff1a; 进程之间是相互独立的&#xff0c;进程由内核数据结构和它所对应的代码和数据&#xff0c;通信成本比较高。 进程间通信目的&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程…

AI绘画 | stable-diffusion-web-ui的基本操作

前言 我们下载安装完成stable-diffusion-web-ui以后&#xff0c;下载对应风格的模型&#xff0c;就可以开始我们的绘画操作了。进行Ai绘画操作前&#xff0c;我们最好先弄清楚web ui界面上的参数按钮的含义。这样我们就能更轻松的绘画出我们想要stable-diffusion-web-ui创作出…

【C/PTA】循环结构进阶练习(二)

本文结合PTA专项练习带领读者掌握循环结构&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 7-1 二分法求多项式单根 二分法求函数根的原理为&#xff1a;如果连续函数f(x)在区间[a,b]的两个端点取值异号&#xff0c;即f(a)f(b)<0…

AR眼镜硬件解决方案_AR/VR智能眼镜安卓主板芯片方案介绍

随着近两年来增强现实(AR)技术的逐渐成熟&#xff0c;采用MT8788芯片解决方案的AR眼镜已经问世。众所周知&#xff0c;AR技术可以帮助开发者打造一个既强大而又实用的混合现实世界&#xff0c;将虚拟与真实世界相结合。 据了解&#xff0c;MT8788芯片采用了多芯片分布式处理系统…

卡牌游戏类型定制开发微信卡牌小程序游戏

卡牌类型的游戏开发具有一些独特的特点和挑战&#xff0c;以下是一些主要的特点&#xff1a; 卡牌设计和平衡&#xff1a;卡牌游戏的核心是卡牌设计和平衡。开发团队需要设计各种卡牌&#xff0c;确保它们在游戏中相互平衡&#xff0c;以便提供有趣的游戏体验。卡牌的特性、效…