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元素对插件进行自定义绑定,其主要配置标签和格式如下图。其中:

  1. groupId+artifactId+version定义需要绑定的插件坐标

  2. excution下的goals对应插件的目标,例如maven-surefire-plugin:test冒号后的test为一个goal

  3. phase对应声明周期中的phase,phase非必填,因为部分插件定义了默认阶段。

  4. 另外,configuration为参数配置

实用maven笔记一概念&构建的更多相关文章

  1. 实用maven笔记二-信息&依赖管理

    目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...

  2. 实用maven笔记三-仓库

    maven管理依赖的一个很重要的基础在于,其维护了收集大量依赖jar包的仓库. maven的仓库分类为本地仓库和远程仓库. 构件在仓库的路径大致为:groupId/artifactId/version ...

  3. 实用maven笔记四-打包&其他

    通过使用maven的生命周期和丰富多样的插件,可以方便的将项目代码编译打包为自己需要的构件. maven默认项目主代码位置src/main/java目录,测试代码位置src/test/java目录.主 ...

  4. Maven笔记之核心概念及常用命令

    Maven的核心概念 Maven是一款服务于java平台的自动化构建工具. 自动化构建工具还有:make->ant->maven->gradle       1.约定的目录  2.P ...

  5. Maven笔记---超详细

    显眼位置标注来源:此文章为B站课程黑马程序员Maven全套教程笔记,由本人整理. Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM) POM (P ...

  6. maven笔记

      jar间接依赖:  被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包.   建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了    .conf:  C ...

  7. 理解maven的核心概念

    原文出处:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的 ...

  8. Maven的基本概念

    一.Maven的基本概念' Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1 ...

  9. Maven之基本概念及特性的基本介绍

    maven最主要的概念是坐标和依赖,这是maven可以极大简化构建过程以及进行项目管理的基础. 坐标 类似于地理位置的坐标,maven的坐标也是用来标记的,不同是它是来标记maven中的不同组件,也就 ...

随机推荐

  1. Digital Root 的推导

    背景 在LeetCode上遇到这道题:Add Digits 大意是给一个数,把它各位数字相加得到一个数,如果这个数小于10就返回,不然继续 addDigits(这个相加得到的数). 题目很简单,但是如 ...

  2. git使用记录二: 给文件重命名的简单方法

    git使用记录三: 给文件重命名的简单方法 git mv file_name_old file_name_new mv: 文件命名 file_name_old : 文件当前的名字 file_name_ ...

  3. HTML- 锚点实例

    <!DOCTYPE HTML> <html> <head> <meta charset='utf-8'> <title>锚点实例</t ...

  4. jquery 的几种写法和常见问题

    为了理解页面初始化事件的编写和执行方式,特此记录下页面加载事件的语句方式: //最简单的加载事件语句 $(function(){ alert("这个提示框最先弹出")//这个用的最 ...

  5. js 中的深拷贝与浅拷贝

    在面试中经常会问到js的深拷贝和浅拷贝,也常常让我们手写,下面我们彻底搞懂js的深拷贝与浅拷贝. 在js中 Array 和 Object  这种引用类型的值,当把一个变量赋值给另一个变量时,这个值得副 ...

  6. jQuery对于demo元素的上移、下移、删除操作等实现

    今天给大家分享一个实用的jQuery技能:dom元素的操作:我们经常会去获取dom元素去实现交互效果,以及数据的操作. 首先复习一下jQuery DOM 元素方法: .get() 获得由选择器指定的D ...

  7. kubernetes集群的安装异常汇---docker的驱动引擎

    异常[kubelet cgroup driver:cgroupfs跟docker cgroup driver:systemd不一致] 异常描述 error: failed to run Kubelet ...

  8. MMM实现Mysql高可用

    MySQL主主同步方案 l  MySQL主主+Keepalived l  MySQL+DRBD+Heartbeat 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主主方案, ...

  9. JS数字转字符串的方法(number to string)

    一.双点解析 ..toString(); 二.括号先计算再转换 ().toString(); 三.加空串 + ''

  10. 使用Makefile编译Erlang

    #配置选项,可以是DEBUG和RELEASE CONFIG ?= RELEASE #语言配置,可以是chs(简体中文).cht(繁体中文)等等 Region ?= chs #源文件目录 SOURCE_ ...