实用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中的不同组件,也就 ...
随机推荐
- nginx 设置http访问ftp目录内文件
设置 nginx “403 Forbidden” 错误的原因及解决办法 原文链接 https://www.cnblogs.com/chenzc/p/4461130.html nginx 的 403 F ...
- 39.Binary Tree Inorder Traversal(二叉树中序遍历)
Level: Medium 题目描述: Given a binary tree, return the inorder traversal of its nodes' values. 思路分析: ...
- Linux安装配置nfs实现共享远程目录
1. 服务端安装nfs yum -y install nfs-utils rpcbind 2.编辑/etc/exports /etc/exports文件内容格式: <输出目录> [客户端1 ...
- redux和react-redux
redux和react-redux的关系: redux是react的状态管理工具,却不仅仅只是为了react而生的,所以在使用中会存在痛点.而react-redux是专门为了react定制,目的是为了 ...
- 回车\r的含义
package main import "fmt" func main() { // \r 回车,从当前行的最前面开始输出,覆盖掉以前的内容 // 输出:曹操刘备关羽 fmt.Pr ...
- 2018-8-10-win10-uwp-横向-AppBarButton
title author date CreateTime categories win10 uwp 横向 AppBarButton lindexi 2018-08-10 19:16:50 +0800 ...
- 五、bootstrap-Table Treegrid
一.bootstrap-Table Treegrid <!DOCTYPE HTML> <html lang="zh-cn"> <head> &l ...
- 59th python下graphviz安装 砖
原文 摘录 感谢分享: https://www.cnblogs.com/liusx0303/p/9155305.html 参考链接:https://blog.csdn.net/u01325041 ...
- Es学习第四课, 倒排索引
大家知道,ES的发明者初衷是想做一个搜索引擎给自己老婆用来搜菜谱,所以ES的核心工作就是做搜索,下面我们就开始讲关于搜索方面的知识点. DOC的概念我们第一课就讲过,它是ES存储数据的最小单元,我们再 ...
- hadoop HA集群的安装
1.hadoop集群规化 ip 主机名 安装软件 角色 运行进程 10.124.147.22 hadoop1 jdk.zookeeper.hadoop namenode/zookeeper/jobhi ...