实用maven笔记一概念&构建
maven,作为我现在每天都会使用的工具,却发现我还有很多地方了解的迷迷糊糊。老大就曾说过我的一个问题在于,做事情不够精细。大概就是太浮于表面吧。最近突然非常想把maven撸一遍。豆瓣搜了下高分书籍,还真找到一本《Maven实战》,看完真的好多知识点拨开云雾见月明。俗话说好记性不如烂笔头,本系列文章主要从概念、构建功能、管理、仓库、多模块打包几个方面记录知识点。
maven——既是一个异常强大的构建工具,也是一个项目依赖管理和信息管理的工具。作为构建工具,其主要功能包括清理、编译、测试、打包部署;同时maven可通过仓库自动下载和管理依赖构件。
概念解释
构件(artifact):任何一个依赖、插件或者项目构建的输出包,如war或jar
构建:将项目代码通过工具编译、打包生成输出包的过程
生命周期:构建目标的执行顺序,是一个良好定义的序列,在maven中是抽象概念。
maven安装
maven的安装方法比较简单,网上也有很多教程,这里简单描述下载linux下的安装过程:
1. 环境要求:安装java
2.官网下载maven,解压
3.配置环境变量M2_HOME,配置环境变量path,添加bin目录
maven包文件目录
maven包下载解压后,可以看到解压包里有多个文件夹,各文件夹主要作用如下:
bin:运行脚本,包含mvn和mvnDebug,mvnDebug可以在运行Maven时开启debug调试Maven
boot:maven的类加载器
conf:包含settings.xml,可在机器上全局定制Maven行为;推荐使用~/.m2/settings.xml,只在用户级别定制Maven行为
lib:包含Maven运行时需要的Java类库
构建功能
maven首先是一个强大的构建工具。其构建功能与其生命周期及插件息息相关。maven的生命周期为抽象概念,实际行为由插件完成。maven会在需要时下载并使用插件。
生命周期
maven有三套相互独立的生命周期:clean清理项目、default构建项目,site建立站点。每个生命周期包含一些阶段,且后面的阶段依赖于前面阶段的执行。其生命周期包含的阶段如下表所示。可单独执行某一个周期,但是选择周期中的某个phase时,该周期中该phase之前的阶段均会被执行。
|
周期 |
阶段(phase) |
|
clean |
pre-clean/clean/post-clean |
|
default |
validate/initialize/generate-sources/process-sources/generate-resources/process-resources/compile/process-classes/generate-test-sources/process-test-sources/generate-test-resources/process-test-resources/test-compile/process-test-classes/test/prepare-package/package/pre-integration-test/integration-test/post-integration-test/verify/install/deploy |
|
site |
pre-site/site/post-site/site-deploy |
内置绑定
如前文所述,生命周期知识maven的抽象概念,真正的执行行为依赖于插件。maven的生命周期和插件之间存在内置绑定(若某个阶段默认未绑定任何插件,则也没任何实际行为),且由项目打包类型决定。例如jar包类型的生命周期与默认绑定:
| 生命周期阶段 | 插件目标(goal) | 功能 |
|
clean |
maven-clean-plugin:clean |
|
|
site |
maven-site-plugin:site |
|
|
site-deploy |
maven-site-plugin:deploy |
|
|
process-resources |
maven-resources-plugin:resources |
复制主资源文件至主输出目录 |
|
compile |
maven-compiler-plugin:compile |
|
|
process-test-resources |
maven-resources-plugin:testResources |
复制测试资源文件至测试输出目录 |
|
test-compile |
maven-compiler-plugin:testCompile |
|
|
test |
maven-surefire-plugin:test |
|
|
package |
maven-jar-plugin:jar |
|
|
install |
maven-install-plugin:install |
安装到本地仓库 |
|
deploy |
maven-deploy-plugin:deploy |
将项目的构建输出文件部署到远程仓库,需在pom配置仓库地址 |
自定义绑定
除了内置绑定外,也可以通过pom文件的build-plugins-plugin元素对插件进行自定义绑定,其主要配置标签和格式如下图。其中:
groupId+artifactId+version定义需要绑定的插件坐标
excution下的goals对应插件的目标,例如maven-surefire-plugin:test冒号后的test为一个goal
phase对应声明周期中的phase,phase非必填,因为部分插件定义了默认阶段。
另外,configuration为参数配置

实用maven笔记一概念&构建的更多相关文章
- 实用maven笔记二-信息&依赖管理
目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...
- 实用maven笔记三-仓库
maven管理依赖的一个很重要的基础在于,其维护了收集大量依赖jar包的仓库. maven的仓库分类为本地仓库和远程仓库. 构件在仓库的路径大致为:groupId/artifactId/version ...
- 实用maven笔记四-打包&其他
通过使用maven的生命周期和丰富多样的插件,可以方便的将项目代码编译打包为自己需要的构件. maven默认项目主代码位置src/main/java目录,测试代码位置src/test/java目录.主 ...
- Maven笔记之核心概念及常用命令
Maven的核心概念 Maven是一款服务于java平台的自动化构建工具. 自动化构建工具还有:make->ant->maven->gradle 1.约定的目录 2.P ...
- Maven笔记---超详细
显眼位置标注来源:此文章为B站课程黑马程序员Maven全套教程笔记,由本人整理. Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM) POM (P ...
- maven笔记
jar间接依赖: 被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包. 建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了 .conf: C ...
- 理解maven的核心概念
原文出处:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的 ...
- Maven的基本概念
一.Maven的基本概念' Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1 ...
- Maven之基本概念及特性的基本介绍
maven最主要的概念是坐标和依赖,这是maven可以极大简化构建过程以及进行项目管理的基础. 坐标 类似于地理位置的坐标,maven的坐标也是用来标记的,不同是它是来标记maven中的不同组件,也就 ...
随机推荐
- tfsenflow队列|tf.train.slice_input_producer|tf.train.Coordinator|tf.train.start_queue_runners
#### ''' tf.train.slice_input_producer :定义样本放入文件名队列的方式[迭代次数,是否乱序],但此时文件名队列还没有真正写入数据 slice_input_pr ...
- Uncaught (in promise) DOMException谷歌浏览器js报错分析
Chrome的自动播放的政策在2018年4月做了更改,这点在开源中国的这篇文章中也有说到. 新的行为:浏览器为了提高用户体验,减少数据消耗,现在都在遵循autoplay政策,Chrome的autopl ...
- 爬虫-ajax请求遇到Unicode编码问题
2018-08--4爬取金色财经网页 网址:https://www.jinse.com/search/EOS 第一步:我观察了网页:发现了网页是一个发送ajax请求的网页,发现如下: 然后 我就先爬取 ...
- 对python中的__name__的理解
一开始学习python的时候,不理解python中的__name__的用途,一致感觉__name__的返回结果就是__main__ 今天系统的看了一下,才理解过来,__name__真正的用处是用在使用 ...
- vue 纯前端导出 excel 表格
在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...
- 重读ORB_SLAM之Tracking线程难点
1. 初始化 当获取第一帧图像与深度图后,首先设置第一帧位姿为4*4单位矩阵,然后为整个map添加关键帧与地图点.且更新地图点与关键帧的联系,例如地图点被哪个关键帧观测到,而此关键帧又包含哪些地图点. ...
- new做了些什么?
new做了些什么? function People(name, age){ this.name = name; this.age = age; }; var xiaoming = new People ...
- css-目标伪类选择器:target的应用
目标伪类选择器:target是众多CSS3众多 动态 伪类选择器中的一个,用来匹配锚点指向的元素,突出显示活动的HTML锚. <style> p:target{ border: 2px s ...
- mac OS 安装 Homebrew及常用命令
Homebrew 是由国外大神 Max Howell 开发的一款包管理工具,类似Debian的apt,他可以安装任何你想安装的东西. 安装方法 命令行输入 /usr/bin/ruby -e &quo ...
- linux随笔-04
管道符.重定向与环境变量&vim编辑器 输入输出重定向 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入. 标准输出重定向(STDOUT,文件描述符为 ...