实用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中的不同组件,也就 ...
随机推荐
- latex 查找缺失的库文件
app-portage/pfl contains a program to search in an online database for a Gentoo package containing a ...
- 用MR生成HFile文件格式后,数据批量导入HBase
环境hadoop cdh5.4.7 hbase1.0.0 测试数据: topsid uid roler_num typ 10 111111 255 0 在Hbase 创建t2数据库: create ...
- exsi 回收虚拟机磁盘
用客户端登陆服务端,用下面命令停止虚拟机机器 esxcli vm process list 用如下命令关闭一台虚拟机: esxcli vm process kill --type=[soft,h ...
- money (dp)
牛客网暑假训练第二场D题: 链接:https://www.nowcoder.com/acm/contest/140/D来源:牛客网 题目描述 White Cloud has built n store ...
- 【知识强化】第四章 网络层 4.4 IPv4
这节课我们来学习一个非常重要的概念,就是IPv4地址,其实也是我们常用的IP地址. 首先我们来了解一下,为什么会有IP地址的出现以及它是做什么用的.假如说在很多年前我遇到一个女生非常的漂亮,等了十年之 ...
- Ubuntu 16.04 修改状态栏位置
修改状态栏位置: gsettings set com.canonical.Unity.Launcher launcher-position Bottom #底部(苹果风格) gsettings set ...
- 虚拟机复制的linux无法联网,解决Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
一.问题描述 OS:centos 原因是拷贝虚拟机造成的. 使用vmworkstation打开虚拟机的时候,要选择copy而非move. 二.解决描述 网络上解决步骤各异,其实就一句话.只要保证vmw ...
- eclipse 附加进程调试java程序(转)
转自:http://blog.csdn.net/zhoushenghuang/article/details/54485645 第一步,启动Java程序时需要设置JVM参数 右击java项目-> ...
- 转 HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解 scrollHeight: 获取对象的滚动高度. scrollLe ...
- v-bind属性,v-model属性,:model属性
一.v-bind 1.将按钮的title(key)绑定为data里指定的值 强调<input type="button" value="按钮" v-bin ...