[Maven]讲讲它的构建生命周期和拉取 jar 包流程
我们都知道, Maven 是一款非常优秀的软件项目管理 & 自动构建的工具,相信各位在项目中都多多少少接触过
那么今天咱们就来扒一扒它的构建生命周期都有哪些,以及拉取 jar 包时它的一个流程是怎样的
Maven 生命周期
说到 Maven 的构建生命周期,我的小脑瓜里面冒出来的就是: clean
install
deploy
这些了
但是其实 Maven 生命周期不仅仅是这些~
Maven 整个生命周期大概可以分为三大类:
- clean : 目的在于清理项目
- default : 目的在于构建项目
- site : 目的在于建立项目站点
其中 default
生命周期它的目的在于构建项目,所以详细来说又可以再分:
- validate: 验证要构建的项目是正确的,并且所需要的资源是存在的
- compile: 编译项目中的 java 文件成为虚拟机能识别的 .class 字节码文件
- test: 使用合适的单元测试框架来测试编译的源码是否可以正确运行
- package :将编译后的源代码打包( jar 或者 war )
- verify: 验证测试结果确保达到目标
- install: 将 package 放到本地仓库中,用作本地其他项目的依赖项
- deploy: 在构建环境中完成之后,将最终的 package 传到远程仓库中,便于共享
我经常用的 Maven 生命周期就是刚开始我的小脑袋瓜就冒出来的那几个了: clean
install
deploy
但是现在 idea 和 Maven 已经有了一个非常完美的配合了,所以一般都是直接在 idea 里面操作,这些命令说起来也是很久没用过了
拉取 jar 包流程
讲完了 Maven 的生命周期,接下来说说,当我们使用 Maven 时,它是如何帮助我们拉取 jar 包的
首先上一张图:(问我为啥都是英文么?因为这样显得我很有文化的样子嘛~
接下来分析一下它的整个流程
local repository
就是本地仓库啦,在项目中使用到的 jar 包如果本地仓库中有,那就好了,什么都不用做,直接引用就 OK 了
但是如果本地仓库中没有呢?
有两种方法可以找到
第一种就是直接在我们项目中的 pom.xml
文件中,写上使用到的 <repository>
<pluginRepository>
, Maven 就会根据这个路径去找到要下载的 jar 包,但是这种方式我们一般都不怎么使用,因为我们更喜欢在 pom.xml
文件中以这样的方式使用:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency></dependencies>
第二种方法就是我们常见的,将使用到的仓库地址存放在 Maven 的 setting 文件中,例如这样定义:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
当需要的 jar 包本地仓库没有时,就会通过 Maven 中的 setting 文件,我们设置的 mirror
通过 Repository Manager
找到镜像仓库,再通过分组/版本等信息,定位到我们想要的 jar 包
镜像仓库肯定都是公共的嘛,也就是 central repository
,然后肯定也会去做 cdn 处理,也就是 central CDN
,那么问题就是 central repository
中的相关数据是从哪里来的呢
是从 project-dedicated staging repositories
(专用于项目的暂存库) 中同步过来的,我的理解就是:这个仓库是专用于项目的,然后经过大量项目的实践验证之后的 jar 包,会同步到 central data
中,再由 central data
向下同步,同时 central data
中的数据,也会 push
(推送)到 public forges(multi-projects) staging repositories
(公共库) 中
这样整个流程就建立起来了
扩展: 推送 jar 包到私服
我记得原来折腾 Maven 的时候,弄过怎么推送 jar 包到私服(当时搭建的私服是 Nexus ),当时也记录了一些东西,放在这里当个扩展内容吧
推送 jar 包到私服,主要有两种方式:
- 使用命令推送 jar 包
- 通过私服界面进行手动推送
接下来详细讲讲该如何推送,在这里以向 Nexus 推送为例
在使用命令推送 jar 包时,要在私服界面上允许远程推送,具体设置如下图:
设置完之后,再使用下面的命令就可以推送了
mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=C:\test\tool-1.0.jar -DgroupId=com.example -DartifactId=tool -Dversion=1.0 -Dpackaging=jar -DrepositoryId=thirdparty -Durl=http://192.168.163.129:8081/nexus/content/repositories/thirdparty/
其中一些字段的含义是:
-Dmaven.test.skip=true //跳过编译、测试
-Dfile=C:\test\tool-1.0.jar //jar包文件地址,绝对路径
-DgroupId=com.example //gruopId--pom坐标,自定义
-DartifactId=tool //artifactId--pom坐标,自定义
-Dversion //版本号
-Dpackaging //打包方式
-DrepositoryId //远程库服务器ID
-Durl //远程库服务器地址
手动上传的话,就好说很多了,直接在 Nexus 界面操作即可
如下图,就上传好了
看完这里关于如何推送 jar 包到远程服务器就没有啦~
但是我好奇心比较强,因为推送 jar 包到远程服务器上面的话,那这个 jar 包肯定是保存在服务器上面了,我就想知道它保存到哪里了,一定是有路径的
然后各处点的时候发现了
我们去这个路径下看看,发现真的是上传到了这里
以上,就是我想要分享的内容了`
感谢您的阅读哇~
[Maven]讲讲它的构建生命周期和拉取 jar 包流程相关推荐
- maven私服仓库搭建、上传或者拉取jar包
maven私服仓库搭建 参考:https://www.cnblogs.com/wuwei928/p/10338307.html 一.使用Docker安装Nexus docker pull sonaty ...
- Maven学习:项目构建生命周期
图1 maven对项目构建的生命周期划分为三个阶段 可以比喻成婴儿时期,成年人时期,和老年时期. 成年人时期(default)做的事情最多,任务也基本上都处于这个阶段. 图2 Clean要干的事情如图 ...
- Maven(4)--- 构建生命周期
Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程. 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的: 阶段 处理 描述 验证 valid ...
- maven生命周期所有阶段_Maven构建生命周期,阶段和目标
maven生命周期所有阶段 什么是Maven构建生命周期? (What is Maven Build Lifecycle?) When we build a Maven project, it exe ...
- 004_Maven构建生命周期
1. Maven构建生命周期定义了一个项目构建跟发布的过程. 2. 一个典型的Maven构建(build)生命周期 2.1. 典型的Maven构建(build)生命周期是由以下几个阶段的序列组成的: ...
- Maven第6篇:生命周期 插件
Maven第6篇:生命周期 & 插件 前面我们使用maven过程中,用到了一些命令,如下: mvn clean mvn compile mvn test mvn package mvn ins ...
- gradle挂接到构建生命周期(七)
目录 1. 概念 2. 使用gradle提供的闭包 3. 实现gradle API提供的监听器接口 1. 概念 我们知道,gradle的生命周期为 初始化阶段 => 配置阶段 => 执行阶 ...
- 使用Maven构建Dubbo服务的可运行jar包
本文为<基于Dubbo的分布式系统架构视频教程>的课程系列文档,更多课程信息,请关注:http://www.roncoo.com Dubbo视频教程--基础篇--第07节--使用Maven ...
- 从maven私服(nexus)拉取jar文件,解析项目pom依赖信息
一.前言 关于pom解析的方式,常见的我认为有两种: 一种是利用dom tree的结构特性,利用dom4j提供的xml解析工具将pom文件读取为dom tree结构,再层层解析出内容. 第二种方式更为 ...
- Idea中Maven报错:Failed to read artifact descriptor for jar包名.jar.jar包版本的解决方式
Idea中Maven报错:Failed to read artifact descriptor for jar包名.jar.jar包版本的解决方式 故障现象 尝试解决 总结 故障现象 最近这种故障频发 ...
最新文章
- node.js 多个异步过程判断执行是否完成
- vbsedit无法创建空文档_如何用Python快速优雅的批量修改Word文档样式?
- REST WebServices学习
- boost::serial_executor相关的测试程序
- leetcode 230. Kth Smallest Element in a BST | 230. 二叉搜索树中第K小的元素(Java)
- 数列互质(莫队算法)
- 联信高效的数据传输机制
- 使用Maven插件对项目进行打包
- Mac解压Linux平台tar包报错:tar: Error reading Truncated input file
- JS获取短信验证码60秒
- 2016noip蚯蚓《单调队列》
- 如何系统整理需求调研报告
- cwrsync向linux免密同步,Cwrsync如何使用可以实现Linux与windows下的文件同步详解
- 二进制 八进制 十进制 转换
- 知识图谱(关系网络)概念及常用算法
- 阿里P8总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- ubuntu将cuda卸载干净
- KaTex的一个简单例子
- GNS3实验:三层交换机配置
- 流程化规范化和制度化为何在企业管理中如此重要?
热门文章
- 解密产品经理兼职做猎头,3个月赚十万
- 居家也可以减肥?懒人瘦身也能行-987减肥网
- 玩转Reactjs第三篇-组件(模式stateprops)
- 记一次小白的手游脚本破解过程及难题
- 华为手机真机测试问题 The application could not be installed: INSTALL_FALLED_INTERNAL_ERROR
- 三角脉冲信号的表达式_脉冲发生器产生一个单三角脉冲,其波形如图所示,例1写出电压U 与.pdf...
- OpenDDS和RTI DDS内置数据类型的互联互通测试
- 怪异,漂亮的几个数学恒等式(转)
- [PR] 关于Adobe Premiere Pro CS6 中文乱码的问题(怎么选中文字体?)
- DEM: 诊断事件管理 (Diagnostic Event Manager)