当前位置: 首页 > news >正文

Maven 的仓库、周期和插件

优质博文:IT-BLOG-CN

在这里插入图片描述

一、Maven 仓库

Maven的世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构建。Maven在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库。任何的构建都有唯一的坐标,即 groupIdartifactIdversion组成的坐标,Maven 根据这个坐标定义了构建在仓库中的唯一存储路径,规则如下:

<dependency><groupId>com.yintong.distribute</groupId><artifactId>customermgr</artifactId><version>0.0.1-SNAPSHOT</version><type>war</type>
</dependency>

【1】基于groupId准备路径,将配置中的 “.” 转换为路径分隔符 “/” ,例如:com.yintong.distribute转换后:com/yintong/distribute
【2】基于artifactId准备路径,将artifactId连接在后面:com/yintong/distribute/customermgr
【3】使用version准备路径,将version连接在后面:com/yintong/distribute/customermgr/0.0.1-SNAPSHOT
【4】将artifactIdversion以分隔符连接字号连接:com/yintong/distribute/customermgr/0.0.1-SNAPSHOT/customermgr-0.0.1-SNAPSHOT
【5】如果有classifier标签,就需要在第4项后增加分隔符连字号(-)再加上 classifier,如果没有就不用加。
【6】如果有extension标签,则加上 “.” 分隔符和extension,而extension是由packaging决定的:com/yintong/distribute/customermgr/0.0.1-SNAPSHOT/customermgr-0.0.1-SNAPSHOT.jar

至此,我们了解了Maven对于构建存储的细节。Maven仓库分为两大类,分别是本地仓库和远程仓库。Maven通过坐标寻找构建时,首先会查看本地仓库,如果有,就直接使用。如果没有,就回去远程仓库查找,找到会先下载到本地,在使用。如果远程库找不到则报错。

本地仓库: 存在于安装Maven的本地,在第一次执行maven命令时创建,默认路径在用户自己的目录下./m2/repository/下,也可以通过编辑Maven 的配置文件setting.xml中的localRepository标签,来将本地仓库设置为想要的位置。一个构件只有在本地仓库中之后,才能由其他的Maven项目使用。一般通过mvn install命令来构件安装到本地仓库中。

远程仓库: 顾名思义,就是存在于服务器上的仓库。当我们安装好 Maven时,本地仓库中还没有任何构件,此时就需要我们自己安装,以及从远程仓库中下载构建来充实自己的本地仓库了。远程仓库有很多个,其中 Maven默认的远程仓库为中央仓库,该仓库中包含了世界上绝大数流行的开源java构件,以及源码、作者信息、软件配置管理SCM、信息、许可证信息等,也是Maven能做到 “开箱即用” 的最大保证。其余还有一些第三方仓库,如jcenterGoogle、阿里云都开设了自己的Maven仓库,有兴趣的读者可以自己寻找对应的资料。

如果有需要,也可以搭建自己的私服,它是一种特殊的远程仓库,假设在局域网内,供组织内使用。有以下好处:
1)、节省自己的外网宽带。大量对外仓库的重复请求会消耗很大的宽带,利用私服代理外部仓库后,可消除对外的重复下载;
2)、加速Maven构建。不停地连接和请求外部仓库是十分耗时的,但查询局域网内的仓库则很快;
3)、可以部署自己专用的构件,或者外部不存在的第三方构建。
4)、提高稳定性,增强控制。Maven构建高度依赖与远程仓库,当Internet 不稳定时,Maven的构建也会变的不稳定,甚至无法构建。而是用私服,由于其中已经缓存了大量的构件,即使么有InternetMaven也可以正常运行;
5)、降低中央仓库的负荷。

Nexus为常用的Maven私服搭建软件,有兴趣的可以自行查找资料。

二、Maven 生命周期

Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都对项目进行清理、编译、测试、部署。Maven从大量项目和构建工具中学习和反思,总结了高度完善的、易扩展的生命周期,将构建过程中的每一步,都映射到生命周期的每一个环节中。

Maven拥有三套相互独立的声明周期,分别为cleandefaultsite,每个生命周期包含一些阶段,这些阶段都是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段,下面会对每个周期包含的阶段进行阐述,并对其中重要的阶段作出注释:

clean周期: 为项目的清理周期,包含pre-cleanclean(清理上一次构建生成的文件),post-clean三个阶段。

default周期: 定义了真正构建时所需要执行的所有步骤,它是三个周期中最核心的部分,包含了如下阶段:validateinitializegenerate-sourceprocess-source(处理项目主资源文件)、generate-resourcesprocess-resourcecompile(编译项目的主源码)、process-classesgenerate-test-sourceprocess-test-resourcetest-compile(编译项目的测试代码)、process-test-classestest(使用单元测试框架运行测试,测试代码不会被打包或部署)、prepare-packagepackage(接受编译好的代码,打包成可发布的格式,例如:jar)、preintegration-testintegration-testpost-integration-testverifyinstall(将包安装到Maven本地仓库,供本地其他Maven项目使用)、depoly(将最终的包复制到远程仓库,供其他开发人员和Maven项目使用)

site周期: 为基于pom中的信息进行自动构建和发布项目站点,包含pre-sitesite(生成项目站点文档)、post-sitesite-deploy(将生成的项目站点发布到服务器上)

对于上述未加注释的阶段,根据名称也能猜个大概,若想进一步了解参考:官方文档

当我们使用一个Maven命令,例如:mvn package时,实际执行的是该阶段所属周期从第一个阶段到调用阶段之间的所有阶段,既default周期从validatepackage之间的所有阶段。而调用多个周期的命令,如mvn clean install时,则执行的是各个周期对应的第一个到调用阶段之间的所有阶段,既pre-cleanclean,以及default周期的validateinstall之间的所有阶段。

三、Maven 插件

Maven生命周期以及其各个阶段,都是抽象出来的概念。其实际的动作都是通过插件来完成的,不同声明周期绑定不同的插件,如clean周期绑定的maven-clean-pluginsite周期绑定的maven-site-plugindefault周期根据不同的阶段绑定了maven-jar-plugin等。Maven核心的东西不过3-4M,一旦在执行任务时没有碰到插件,它就会跑到相应的地方去下载,放到本地仓库中,之后再完成整个过程。

为了能够复用代码,一个插件往往能够完成多个任务。如:maven-dependency-plugin,它能够基于项目依赖做很多事情。它能够分析项目依赖,帮组找出潜在的无用依赖;它能够列出项目的依赖树,帮组分析依赖来源;它能够列出项目所有已解析的依赖,等等。为了每个这样的功能编写一个独立的插件显然是不可取的,因此,这些功能都聚集在一个插件中,通过插件的目标来区分这些功能,如上述的dependency插件的功能就是分别通过mvn dependency:analyzemvn dependency:treemvn dependencylist来调用。

了解插件后,就有一个问题,maven默认的生命周期及阶段,都有对应的插件来执行,但是我们想要做的任务,在默认的阶段里面没有怎么办?这个时候就可以通过自己来选择某个插件的某个目标,在pombuild-plugins中将其绑定到生命周期的某个阶段,然后调用命令执行响应任务,当生命周期经过这个阶段,就会执行绑定的该目标了。比如我们希望混淆项目中的js/css源码,可以通过如下配置来处理:

  <build><plugins><plugin><groupId>net.alchim31.maven</groupId><artifactId>yuicompressor-maven-plugin</artifactId><version>1.3.0</version><executions><execution><phase>package</phase><goals><goal>compress</goal></goals><configuration><excludes><exclude>**/*.min.js</exclude><exclude>**/*.-min.js</exclude></excludes><encoding>utf8</encoding><failOnWarning>false</failOnWarning><nosuffix>true</nosuffix><force>true</force><resources>true</resources><linebreakpos>-1</linebreakpos></configuration></execution></executions></plugin></plugins></build>

这样当我们执行mvn package时,就会执行该插件的compress goal,达到将js/css混淆的目的。

Maven的插件有很多种,除了上述声明周期中提到的阶段对应的插件外,还有各种各样具有各式功能的官方和非官方插件,通过定义绑定的方式能让 Maven项目在构建过程中执行更多更丰富特色的任务。其中,官方提供的插件在 官方插件 中能够找到,里面也有相应的说明信息;需要完成一些特定的任务,官方没有提供,就需要自己去寻找对应功能的插件了,比如上面说的 js/css混淆插件;如果任务比较特殊或本地化,并没有这样的插件,则需要自己去开发对应的插件,比如公司的Maven入库管理插件就是针对公司管理需求来开发的。

相关文章:

Maven 的仓库、周期和插件

优质博文&#xff1a;IT-BLOG-CN 一、Maven 仓库 在Maven的世界中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称为构建。Maven在某个统一的位置存储所有项目的共享的构建&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。任何的构建都有唯一…...

parallels desktop19最新免费Mac电脑虚拟机软件

Parallels Desktop是一款运行在Mac电脑上的虚拟机软件&#xff0c;它允许用户在Mac系统上同时运行多个操作系统&#xff0c;比如Windows、Linux等。通过这款软件&#xff0c;Mac用户可以轻松地在同一台电脑上体验不同操作系统的功能和应用程序&#xff0c;而无需额外的硬件设备…...

波动性悖论:为何低风险股票长期跑赢高风险对手?

从去年开始&#xff0c;“红利低波”类的产品净值稳步向上&#xff0c;不断新高&#xff0c;让很多人关注到了A股“分红高”、“波动率低”这两类股票。分红高的公司更受投资者青睐&#xff0c;这从基本面的角度很容易理解&#xff0c;那么波动率低的股票明明波动更小&#xff…...

环信设置头像昵称(安卓android)版

在此真的要吐槽吐槽环信&#xff0c;那么大的公司&#xff0c;文档那么乱。。。真的像一坨屎一样&#xff0c;翻个demo东翻西翻&#xff0c;官网论坛看的眼瞎。。。几乎要放弃了&#xff0c;还好百度到别人的看了看弄出来了 1、首先&#xff0c;要确认自己用的是哪个环信的UI库…...

Rust:用 Warp 库实现 Restful API 的简单示例

直接上代码&#xff1a; 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…...

【SpringBoot】 什么是springboot(一)?如何搭建springboot项目?

文章目录 SpringBoot第一章1、什么是springboot1、回顾ssm项目搭建流程2、springboot项目的优点2、搭建springboot项目方式1:方式2:第二章1、基本配置1、热部署2、注解3、端口配置application.properties特点application.yml特点注意4、环境配置springboot中的配置文件要求5、…...

从loss角度理解LLM涌现能力

如今的很多研究都表明小模型也能出现涌现能力&#xff0c;本文的作者团队通过大量实验发现模型的涌现能力与模型大小、训练计算量无关&#xff0c;只与预训练loss相关。 作者团队惊奇地发现&#xff0c;不管任何下游任务&#xff0c;不管模型大小&#xff0c;模型出现涌现能力…...

debian apt 更改阿里源

1. 备份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件内容为&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…...

Spring Cloud | “微服务“ 架构 与 Spring Cloud

“微服务” 架构 与 Spring Cloud 目录: "微服务" 架构 与 Spring Cloud1. 认识架构"单体" 架构"SOA" 架构"微服务" 架构 2. "微服务架构" 的功能 :① 微服务架构的 "自动化部署"② 服务 "集中化管理"③…...

win10禁止自动更新的终极方法

添加注册表值 1.运行&#xff0c;输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中&#xff0c;新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名为以下命名“Fl…...

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…...

wireshark的安装使用及相关UDP、TCP、 ARP

初步了解&#xff1a; 进入wireshark后如图&#xff1a; 从图中可以看到很多网络连接在操作的时候我们需要监测哪些 我们可以直接在本地的运行框中输入ipconfig来查看 如图&#xff1a; 从以上图片中我们可以清楚地看到哪些网络连接已经连接的我们只需要按需监测他们即可 但…...

【软考】模拟考卷错题本2024-05-11

1 设计模式- 适配器模式 基本上上述的图解已经涵盖了绝大多数主流的设计模式和其特点。理解记忆下即可&#xff0c;这里对下午的考题也有帮助的。 2 计算机组成原理 cpu 访问速度 这个真的是憨憨咯~看到内存就选内存&#xff0c;题目都没审好。这里的速度比cpu内部的要比外部的…...

VMware虚拟机提示内存不足

VMware虚拟机&#xff0c;k8s集群搭建内存不足的问题 疑问&#xff1a;我的电脑是8G8G双通道的内存&#xff0c;当我在搭建k8s集群时给master-2G内存&#xff0c;node1-3G内存&#xff0c;node2-3G内存&#xff1b; 当依次打开虚拟机到node2时VM提示“物理内存不足&#xff0c;…...

视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷

在数字化时代&#xff0c;视频剪辑已经成为了一项常见且重要的技能。无论是制作家庭影片、工作展示还是社交媒体内容&#xff0c;掌握高效的视频剪辑技巧都能极大地提升我们的工作效率和创作质量。本文将为您介绍云炫AI智剪中高效的视频批量剪辑方法&#xff0c;让您能够一键合…...

讲讲C++四种类型转换

在C中&#xff0c;类型转换&#xff08;或称为类型转换运算符&#xff09;是用来将一个数据类型转换为另一个数据类型的机制。C提供了四种类型转换&#xff1a;静态类型转换&#xff08;Static Cast&#xff09;、动态类型转换&#xff08;Dynamic Cast&#xff09;、重新解释类…...

探索LLM在广告领域的应用——大语言模型的新商业模式和新个性化广告的潜力

概述 在网络搜索引擎的领域中&#xff0c;广告不仅仅是一个补充元素&#xff0c;而是构成了数字体验的核心部分。随着互联网经济的蓬勃发展&#xff0c;广告市场的规模已经达到了数万亿美元&#xff0c;并且还在持续扩张。广告的经济价值不断上升&#xff0c;它已经成为支撑大…...

MBR与GPT分区表

文章目录 MBR分区表MBR分区表结构MBR分区表项查看U盘的分区表信息查看系统中所有磁盘的分区类型获取分区表信息 GPT分区表保护性MBRGPT分区表头格式GPT分区表项格式分区类型分区属性分区表项内容 MBR分区表 CHS &#xff1a;磁头&#xff08;Heads&#xff09;、柱面(Cylinder…...

OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较

最近在与同事讨论BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound有什么区别。 一、从直觉上来说&#xff0c;BRepAlgoAPI_Fuse会对两个实体相交处理&#xff0c;相交的部分会重新的生成相关的曲面。而BRep_Builder.MakeCompound仅仅是把两个实体组合成一个新的实体&#xff0c;…...

C语言 | Leetcode C语言题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(char* a, char* b) {reserve(a);reserve(b);int len_a strlen(a), len_b st…...

老旧电脑焕新:OpenClaw+GLM-4.7-Flash在4GB内存设备上的优化运行方案

老旧电脑焕新&#xff1a;OpenClawGLM-4.7-Flash在4GB内存设备上的优化运行方案 1. 为什么要在老旧电脑上部署AI助手&#xff1f; 去年整理书房时&#xff0c;我翻出一台2015年的MacBook Air&#xff0c;4GB内存的配置在当下连浏览器开几个标签页都卡顿。正当准备将它送进回收…...

5分钟搞懂幂等矩阵:从定义到Python实现

5分钟搞懂幂等矩阵&#xff1a;从定义到Python实现 第一次听到"幂等矩阵"这个词时&#xff0c;我正坐在线性代数课的最后一排昏昏欲睡。教授在黑板上写下"AA"这个看似简单的等式时&#xff0c;我完全没意识到这个概念会在后来的机器学习项目中反复出现。今…...

ncmdump终极解密攻略:5分钟实现网易云音乐NCM格式无损转换

ncmdump终极解密攻略&#xff1a;5分钟实现网易云音乐NCM格式无损转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为下载的网易云音乐只能在特定平台播放而烦恼&#xff1f;NCM格式的音乐文件像是被上了一把无形的锁&am…...

机器人抓手设计必看:用CATIA有限元分析确保Base板刚度的5个关键步骤

机器人抓手设计进阶指南&#xff1a;CATIA有限元分析在Base板刚度优化中的实战应用 在工业自动化领域&#xff0c;机器人抓手的性能直接影响生产效率和产品质量。作为承载整个抓取机构的核心部件&#xff0c;Base板的设计不仅需要考虑强度&#xff0c;更要确保足够的刚度以避免…...

SDMatte镜像轻量化:去除冗余依赖、多阶段构建、镜像体积压缩至3.2GB

SDMatte镜像轻量化&#xff1a;去除冗余依赖、多阶段构建、镜像体积压缩至3.2GB 1. 项目背景与挑战 SDMatte是一款面向高质量图像抠图的AI模型&#xff0c;特别擅长处理复杂边缘和半透明物体的抠图任务。在电商、设计、内容创作等领域有着广泛的应用场景。然而&#xff0c;原…...

PP-DocLayoutV3高算力适配:FP16推理开启后显存降低30%,精度损失<0.5%

PP-DocLayoutV3高算力适配&#xff1a;FP16推理开启后显存降低30%&#xff0c;精度损失<0.5% 文档版面分析是智能文档处理流程中的关键一环&#xff0c;它负责从一张图片中识别出哪里是标题、哪里是正文、哪里是表格或图片。这就像是给文档拍一张X光片&#xff0c;把它的“…...

流水线设计避坑指南:什么时候该用?深度怎么选?看完这篇就懂了

流水线设计实战决策&#xff1a;吞吐率与硬件成本的黄金分割点 在芯片设计和FPGA开发领域&#xff0c;流水线技术就像一把双刃剑——用得好可以大幅提升系统性能&#xff0c;用得不当则可能造成资源浪费甚至引入新的瓶颈。我曾在一个图像处理芯片项目中&#xff0c;因为错误估计…...

如何用Downr1n实现iOS设备有线降级:从原理到实践的分步指南

如何用Downr1n实现iOS设备有线降级&#xff1a;从原理到实践的分步指南 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 面对iOS系统升级后的性能下降和兼容性问题&#xff0c;许多iPh…...

在VSCode中高效使用cl.exe构建和调试活动文件的AI辅助开发实践

在Windows平台上进行C开发&#xff0c;cl.exe是绕不开的核心编译器。很多朋友习惯在VSCode中写代码&#xff0c;但调试时却不得不先打开那个黑底的“Developer Command Prompt for VS”&#xff0c;再在里面启动VSCode&#xff0c;否则就会遇到找不到cl.exe或者链接库失败的经典…...

BeepBox音乐创作终极指南:零基础在线制作器乐旋律

BeepBox音乐创作终极指南&#xff1a;零基础在线制作器乐旋律 【免费下载链接】beepbox An online tool for sketching and sharing instrumental melodies. 项目地址: https://gitcode.com/gh_mirrors/be/beepbox 你是否曾经想过创作属于自己的音乐&#xff0c;却因为复…...