Maven解析让你从新手到高手
yuyutoo 2025-01-19 01:30 5 浏览 0 评论
背景
本文从实战角度出发,笔者多年经验总结,能让你快速理解Maven,知其然且知其所以然,全是干货,让我们开始吧。
文章概览
- Maven能做什么
- Maven自身配置
- Maven插件管理
- Pom文件介绍
- Maven其他
1.Maven能做什么
Maven是一个软件项目管理工具,主要用于构建和管理项目,功能比较丰富。在这里笔者着重想告诉你,Maven主要干两件事:
- Jar包依赖管理 在项目中使用第三方jar是再正常不过的一件事,大家也习以为常。没有maven之前项目使用jar需要我们手动下载,遇到jar依赖问题不得不继续下载直到把所有的jar包下载到项目中,这个过程是痛苦的也浪费程序员宝贵时间。但Jason Van Zyl这位牛逼的程序员搞定了这件事,他开发的Maven工具可以帮你解决下载jar包,若遇到jar包依赖还能自动下载依赖的jar包,整个过程只需要程序员设定一下配置文件即可完成。
- 提供标准目录结构 Maven能统一项目目录,这是怎么回事呢?在没有maven工具之前,每个项目的目录结构不同,比如A项目有3个文件夹,B项目有4个文件夹,在小范围内研发没有问题,一旦范围扩大就没有章法显得目录管理混乱。于是Maven就提供统一目录结构,告诉人们只要你用Maven就会是像下面这样结构。
2.Maven自身配置
- 下载安装Maven 需要提前安装好JDK,然后官网下载需要的版本,注意Maven版本与JDK版本匹配,然后配置Maven环境变量M2_HOME=安装路径,添加path变量%M2_HOME%\bin,CMD窗口执行mvn -v验证。
- setting.xml文件 该文件有内有很多元素,每个元素代表不同含义,本文介绍比较常用的几个:<localRepository></localRepository>:指定下载来的jar包保存目录,默认位置${user.home}/.m2/repository。<servers></servers>:如果有私服,这里可以配置服务器认证信息,以便Maven能够访问和上传到指定的仓库<mirror></mirror>:jar包下载地址,一般国内配置阿里云镜像地址http://maven.aliyun.com/nexus/coptent/groups/public。<profiles></profiles>:定义一组配置集合,适应不同环境,比如开发、测试、生产,POM文件<properties>元素引用该组配置,并激活其中一个。
3.Maven插件管理
Maven是通过各种各样的插件管理项目的,Maven自身仅仅是一个框架,常用的插件比如有clean、compiler、install、jar、war、install等,这些插件也是由Apache提供,插件列表请查看官网。
4.POM文件介绍
POM.xml文件是project object model缩写,翻译过来叫项目对象模型,说人话就是用它来定义每个项目,该文件也是xml格式,每个元素代表不同含义,本文介绍常用几个:
- <parent></parent>:这个元素定义当前模块的父项目的坐标(groupid、artifactid、version)。
- <properties></properties>:用于定义项目使用的属性,比如JDK版本、项目版本、或者jar版本,该元素可以继承。
- <dependencyManagement></dependencyManagement>:父项目声明依赖,能让所有子项目中引用依赖且不用显示列出版本号。
- <dependencies></dependencies>:显示具体依赖,在父子项目中,该元素可以继承。
- <profiles><profile></profile></profiles>:定义不同的构建环境,比如开发、测试、生产环境。
- <build><plugins><plugin></plugin></plugins></build>:项目中需要使用的使用的插件,该元素可以继承。
- <build><resources>><resource></resource></resources></build>:构建项目中处理配置文件,比如将某个配置文件打包到指定项目路径。
- <distributionManagement><repository></<repository>></distributionManagement>:该元素将构建的结果比如jar、war发布到远程仓库,该元素可以配置远程仓库主仓库和快照仓库(id、name、url),与setting.xml中的servers元素对应。
- <repositories><repository></repository></repositories>:项目构建过程中需要访问的所有外部Maven仓库配置。
- <pluginRepositories></pluginRepositories>:项目构建过程中可以从这个仓库下载插件,指定专门的插件仓库地址。
5.Maven其他
- Maven在大项目中管理多模块,模块与模块间存在三种关系:
- 依赖:假设模块service-module依赖common-module,在pom文件中直接使用<dependency>引用。
- 继承:若模块与模块之间存在继承关系,则子模块在pom文件中直接使用<parent>引用父坐标。
- 聚合:聚合将多个子模块组织在一起,由父模块协调子模块构建,子模块有自己的业务逻辑,有单独的pom.xml文件,可以独立部署。先有一个聚合项目,父模块名称aggregator-project,子模块名称module-a,父子模块在同级目录下,当父模块进行构建时,会先进入上一级目录,在上一目录中搜素子目录。父POM文件<modules>定义子模块,例如:<module>../module-a</module>,子模块POM文件<parent>引用父模块,例如:<parent><relativePath>../aggregator-project/pom.xml</relativePath></parent>。
聚合关系:父POM
<!-- aggregator-project/pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>aggregator-project</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>../module-a</module>
<module>../module-b</module>
</modules>
</project>
聚合关系:子POM
<!-- module-a/pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>aggregator-project</artifactId>
<version>1.0.0</version>
<relativePath>../aggregator-project/pom.xml</relativePath>
</parent>
<artifactId>module-a</artifactId>
</project>
- Maven常用命令:
- mvn clean:重新构建之前删除target目录及内容,清理旧的编译结果
- mvn compile:将java源码编译成字节码
- mvn test:执行单元测试
- mvn package:打包项目,生成最终文件,如:jar、war
- mvn install:将JAR文件安装到本地Maven仓库(通常位于 ~/.m2/repository 目录下),方便其他项目引用
- mvn deploy:将项目部署到远程仓库,通过pom.xml中的<distributionManagement>,找到setting.xml中的<servers>元素
- mvn clean install:组合命令,先清理项目,然后编译、测试并安装到本地仓库
- mvn clean package:组合命令,先清理项目,然后编译、测试并打包项目
- mvn test -DskipTests:组合命令,跳过测试直接编译打包
- mvn dependency:tree:组合命令,检查项目中使用的依赖关系及其版本
- mvn archetype:generate:组合命令,根据当前项目,生成新的Maven模版,在创建新的项目时候使用自己自定义的模版
- Maven工具执行流:
总结
Maven工具为目前项目构建使用率较高的工具,了解和掌握该工具能大大提高研发效率,请多多实践本文中的相关介绍。
相关推荐
- 当 Linux 根分区 (/) 已满时如何释放空间?
-
根分区(/)是Linux文件系统的核心,包含操作系统核心文件、配置文件、日志文件、缓存和用户数据等。当根分区满载时,系统可能出现无法写入新文件、应用程序崩溃甚至无法启动的情况。常见原因包括:...
- 玩转 Linux 之:磁盘分区、挂载知多少?
-
今天来聊聊linux下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普!!1、Linux分区简介1.1主分区vs扩展分区硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两...
- Linux 文件搜索神器 find 实战详解,建议收藏
-
在Linux系统使用中,作为一个管理员,我希望能查找系统中所有的大小超过200M文件,查看近7天系统中哪些文件被修改过,找出所有子目录中的可执行文件,这些任务需求...
- Linux 操作系统磁盘操作(linux 磁盘命令)
-
一、文档介绍本文档描述Linux操作系统下多种场景下的磁盘操作情况。二、名词解释...
- Win10新版19603推送:一键清理磁盘空间、首次集成Linux文件管理器
-
继上周四的Build19592后,微软今晨面向快速通道的Insider会员推送Windows10新预览版,操作系统版本号Build19603。除了一些常规修复,本次更新还带了不少新功能,一起来了...
- Android 16允许Linux终端使用手机全部存储空间
-
IT之家4月20日消息,谷歌Pixel手机正朝着成为强大便携式计算设备的目标迈进。2025年3月的更新中,Linux终端应用的推出为这一转变奠定了重要基础。该应用允许兼容的安卓设备...
- Linux 系统管理大容量磁盘(2TB+)操作指南
-
对于容量超过2TB的磁盘,传统MBR分区表的32位寻址机制存在限制(最大支持2.2TB)。需采用GPT(GUIDPartitionTable)分区方案,其支持64位寻址,理论上限为9.4ZB(9....
- Linux 服务器上查看磁盘类型的方法
-
方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。...
- ESXI7虚机上的Ubuntu Linux 22.04 LVM空间扩容操作记录
-
本人在实际的使用中经常遇到Vmware上安装的Linux虚机的LVM扩容情况,最终实现lv的扩容,大多数情况因为虚机都是有备用或者可停机的情况,一般情况下通过添加一块物理盘再加入vg,然后扩容lv来实...
- 5.4K Star很容易!Windows读取Linux磁盘格式工具
-
[开源日记],分享10k+Star的优质开源项目...
- Linux 文件系统监控:用脚本自动化磁盘空间管理
-
在Linux系统中,文件系统监控是一项非常重要的任务,它可以帮助我们及时发现磁盘空间不足的问题,避免因磁盘满而导致的系统服务不可用。通过编写脚本自动化磁盘空间管理,我们可以更加高效地处理这一问题。下面...
- Linux磁盘管理LVM实战(linux实验磁盘管理)
-
LVM(逻辑卷管理器,LogicalVolumeManager)是一种在Linux系统中用于灵活管理磁盘空间的技术,通过将物理磁盘抽象为逻辑卷,实现动态调整存储容量、跨磁盘扩展等功能。本章节...
- Linux查看文件大小:`ls`和`du`为何结果不同?一文讲透原理!
-
Linux查看文件大小:ls和du为何结果不同?一文讲透原理!在Linux运维中,查看文件大小是日常高频操作。但你是否遇到过以下困惑?...
- 使用 df 命令检查服务器磁盘满了,但用 du 命令发现实际小于磁盘容量
-
在Linux系统中,管理员或开发者经常会遇到一个令人困惑的问题:使用...
- Linux磁盘爆满紧急救援指南:5步清理释放50GB+小白也能轻松搞定
-
“服务器卡死?网站崩溃?当Linux系统弹出‘Nospaceleft’的红色警报,别慌!本文手把手教你从‘删库到跑路’进阶为‘磁盘清理大师’,5个关键步骤+30条救命命令,快速释放磁盘空间,拯救你...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)