简单认识Maven 1

ops/2024/10/15 20:04:33/

1.基本概念

Maven 是一个开源的项目管理和构建工具,主要用于 Java 项目,但也支持其他基于 JVM(Java Virtual Machine)的项目,如 Scala、Groovy 等。它基于项目对象模型(Project Object Model,POM)的概念,通过一个名为pom.xml的配置文件来管理项目的构建、依赖关系等重要方面。
项目对象模型(POM) - pom.xml
核心元素

groupId:通常代表项目所属的组织或团体的唯一标识符,类似于 Java中的包名。例如,org.apache.maven中的org.apache表示 Apache 软件基金会这个组织。

artifactId:是项目在组织内的唯一标识符,也就是项目的名称。例如,在org.apache.maven:maven -

compiler - plugin中,maven - compiler - plugin就是这个插件项目的 artifactId。

version:指定项目的版本号,遵循一定的版本命名规范,如1.0.0 -

SNAPSHOT(表示快照版本,通常用于开发过程中的不稳定版本)或2.3.4(表示正式发布版本)。 依赖管理

在pom.xml中,可以使用元素来声明项目所依赖的其他库或项目。例如:

java">		<dependencyes><dependency><groupId>org.springframework</groupId><artifactId>spring - core</artifactId><version>5.3.0</version></dependency></dependencyes>

这就声明了项目依赖于 Spring 框架的spring - core库,版本为5.3.0。Maven 会根据这些信息自动从本地或远程仓库获取所需的依赖项。
构建配置
可以在pom.xml中配置项目的构建相关信息,如构建的源文件目录、目标文件目录、插件配置等。例如,配置maven - compiler - plugin来指定 Java 编译的源版本和目标版本:

java">    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven - compiler - plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

2.依赖管理机制

依赖范围(Scope

compile:这是默认的依赖范围。表示该依赖项在项目的编译、测试和运行阶段都需要。例如,一个普通的 Java Web 项目中的
Spring 框架依赖,在编译源代码、运行测试用例和实际运行项目时都需要用到。
test:表示依赖项仅在测试阶段需要。如junit测试框架,只用于编写和运行单元测试,不会被包含在最终发布的项目中。
runtime:依赖项在编译时不需要,但在运行时是必需的。例如,数据库驱动程序,在编译项目时不需要数据库驱动,但在运行项目连接数据库时就需要。

依赖传递性
如果项目 A 依赖项目 B,项目 B 依赖项目 C,Maven 会根据依赖的范围等因素来确定是否将项目 C 作为项目 A 的依赖项。例如,如果 B 对 C 的依赖范围是compile,且 A 对 B 的依赖范围也是compile,那么 Maven 会自动将 C 作为 A 的依赖项(传递依赖)。
构建生命周期(Build Lifecycle)

2.常见阶段(Phase)

clean:用于清理项目,删除之前构建过程中生成的文件,如编译后的类文件、打包后的文件等。
compile:编译项目的源代码,将.java文件编译成.class文件。
test:运行项目中的测试用例,通常是基于junit或其他测试框架编写的单元测试和集成测试。
package:将项目打包成可发布的格式,如对于 Java 项目可以打包成.jar(普通 Java 项目)或.war(Java Web项目)文件。
install:将打包后的项目安装到本地 Maven 仓库中,以便其他本地项目可以依赖这个项目。
deploy:将项目部署到远程 Maven 仓库,通常用于发布项目到企业内部的仓库或者公共的 Maven 仓库供他人使用。

命令执行
可以通过在命令行输入mvn 来执行相应的构建阶段。
例如,mvn clean install会先执行clean阶段,清理项目,然后执行install阶段,完成编译、测试、打包并安装到本地仓库的一系列操作。

3.插件(Plugins)

常用插件

maven - compiler - plugin:用于编译 Java 源代码,如前面提到的可以配置编译的源版本和目标版本。 maven -
war - plugin:专门用于将 Java Web 项目打包成.war文件的插件,可配置打包的相关参数,如包含或排除某些文件。
maven - site - plugin:用于生成项目的网站文档,包括项目的 API 文档、项目报告等内容。

插件配置与执行
插件在pom.xml中进行配置,除了配置基本的插件版本和参数外,还可以通过绑定到构建生命周期的特定阶段来执行插件任务。
例如,maven - compiler - plugin默认绑定到compile阶段,当执行mvn compile时,这个插件就会自动执行编译任务。

4.仓库(Repositories)

本地仓库(Local Repository)
Maven 在本地计算机上维护一个本地仓库,默认位于用户主目录下的.m2目录(在 Linux 和 Mac 系统中)或者C:\Users\ <用户名>.m2目录(在 Windows 系统)。本地仓库用于存储从远程仓库下载的依赖项,当构建项目时,Maven 首先会在本地仓库中查找所需的依赖项。
远程仓库(Remote Repository)
Maven 中央仓库:这是最常用的远程仓库,地址为https://repo.maven.apache.org/maven2/,其中包含了大量开源项目的库。
私有仓库
:企业或组织可以搭建自己的私有仓库,用于存储内部开发的库或者无法从公共仓库获取的第三方库。项目可以配置同时从公共仓库和私有仓库获取依赖项。


http://www.ppmy.cn/ops/126091.html

相关文章

2.C++经典实例-计算两个数的最小公倍数

用户输入两个数字&#xff0c;然后通过程序计算出这两个数字的最小公倍数&#xff1a; 两个或多个整数公有的倍数叫做它们的公倍数&#xff0c;其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数&#xff08;Least Common Multiple&#xff0c;简写为 lcm&#xff09;…

产品经理内容分享(二):AI产品经理的入门路线图

引言 想象这样一个场景&#xff1a;早晨的阳光穿透窗帘&#xff0c;投射在新一代智能机器人上&#xff0c;它正静静等待着你的第一个命令开始全新的一天。这样的场景听起来像是科幻小说里的情节&#xff0c;但实际上&#xff0c;这正是AI产品经理们工作的成果。如果你对这样的…

Spring Boot教学资源库:开发者的成长之路

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

Linux 系统中配置 Wi-Fi 接口作为客户端,并连接到 Wi-Fi 路由器

方法一&#xff1a;使用 NetworkManager&#xff08;推荐&#xff09; 对于现代 Linux 发行版&#xff08;如 Ubuntu、Fedora 和 CentOS&#xff09;&#xff0c;NetworkManager 是该连接的主要管理工具。你可以使用 nmcli 命令行工具或图形界面&#xff08;如 GNOME 的网络设…

力扣刷题-算法基础

hello各位小伙伴们,为了进行算法的学习,小编特意新开一个专题来讲解一些算法题 1.移除元素. - 力扣(LeetCode) 本题大概意思是给定一个数组和一个数val删除与val相同的元素,不要改变剩余元素的顺序,最后返回剩余元素的个数。 我们在这里使用双指针,这里的双指针并不是…

大数据-159 Apache Kylin 构建Cube 准备和测试数据

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

YOLOv10改进策略【注意力机制篇】| 2024 SCSA-CBAM 空间和通道的协同注意模块

一、本文介绍 本文记录的是基于SCSA-CBAM注意力模块的YOLOv10目标检测改进方法研究。现有注意力方法在空间-通道协同方面未充分挖掘其潜力,缺乏对多语义信息的充分利用来引导特征和缓解语义差异。SCSA-CBAM注意力模块构建一个空间-通道协同机制,使空间注意力引导通道注意力增…

单链表的应⽤

⽬录 1. 单链表经典算法OJ题⽬ 2. 基于单链表再实现通讯录项⽬ ——————————————————————————————————————————— 正文开始 单链表经典算法 1. 链表经典算法OJ题⽬ 1.1 单链表相关经典算法OJ题1&#xff1a;移除链表元素 1.2 …