《Maven实战》关联实际工作的核心知识
通读了《Maven实战》这本书,由于在实际的工作中,对其有一定的操作上的经验。因此,再回头去通读这本书,就能够更加精准的把握里面的核心知识了。
以下我主要从两点去介绍之——
1> m2eclipse插件常用操作
2> Maven最佳实践
一.m2eclipse插件常用操作
1> 执行mvn命令
直接在项目上或者pom.xml上点击鼠标右键,选择Run As选项,就能看到这些命令——

clean、test、package、install等都是常用的命令。这里特别想说的Maven build和maven build…两个选项卡——
(1) “Maven build…”:自定义maven命令:我们常常会用到clean package或者clean install等综合命令,这是非常好的实践方式。
(2) “Maven build”:会罗列之前自定义的所有maven命令,可选择其中一个执行值——

2> 访问maven仓库
显示maven视图——Windows-->Show View-->Other-->Maven Repositories

我们会看到这里面有本地仓及中央仓库,就可以清晰地看见所有的maven库对应的jar或war包了。绝对方便实用。
3> 项目依赖管理
如何添加依赖就不说了,说一下如何分析依赖。这里模拟了这样一个例子——
Hello4工程依赖hello3工程,hello工程依赖hello2工程,这样我们开启hello4工程的POM编辑器中的依赖层次项(Dependency Hierarchy),就能看到——

在实际项目应用中,maven的重复依赖而导致的jar包版本冲突是常常会出现的,利用好该视图能够做出很好的分析。
顺带一下Effective POM视图,它表示一个合并整个继承结构所有信息的POM。假设项目A继承自项目B,而B又隐式地继承自超级POM,那么A的Effective POM就包含了所有A、B以及超级POM的配置。有了Effective POM视图,用户就可以一次得到完整的POM信息。
二、Maven最佳实践
Maven的应用有以下几点核心理论——
1> 坐标及依赖:Maven的一大功能是管理项目依赖。为了能够自动化的解析任何一个java构件,Maven就必须将它们唯一标识,通过坐标来实现之。
2> 仓库:得益于坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。
3> 生命周期和插件:Maven的生命周期是为了对所有的构建过程进行抽象和统一。它包含项目的清理、初始化、编译、测试、打包、继承测试、验证、部署和站点生成等几乎所有构建步骤。形成一套高度完善的、易扩展的生命周期。其每一个步骤都是交由maven插件来完成。
4> 聚合和继承
聚合——如果我们想要一次构建两个(或者多个)项目,而不是到两个模块的目录下分别执行mvn命令,就会用到maven聚合(或者称为多模块)这样一个特性。
继承——一谈到“继承”,便会想到解决重复问题。没错,maven的继承同样如是。
对于聚合模块来说,它知道有哪些被聚合的模块,但哪些被聚合的模块不知道这个聚合模块的存在。
对于继承关系的父POM来说,它不知道有哪些模块继承于它,单哪些子模块都必须知道自己的父POM是什么。
对于第4点理论,我想引入这样一篇文章——Maven最佳实践:划分模块,这篇文章深刻的分析了使用Maven技术构建项目架构相比于传统的架构方式的优势所在。
我们谈到Maven,我们会想到它的以下几点基本优势,也是它的功能所在——
1> 自动化构建——从清理、编译、测试到生成报告,再到打包、部署。跨平台,并提供一致的对外接口。
2> 依赖管理——Maven引入“仓库”的思想,通过经纬,帮助我们有序地管理依赖,轻松解决如版本不一致、版本冲突、依赖臃肿等问题。
通过Maven最佳实践:划分模块这篇文章的深入理解,我们可以知道,它是对maven的依赖管理的引深,它让我们的framework、dao、service等各个环节都能够达到最大化的重用;让项目的依赖仅仅通过各自pom文件就能够轻松的得到有效管理,不用再到一个混乱的纷繁复杂的总的POM(或传统的xml)中寻找自己的配置;它将这个构建过程进行分块划分,我们可以根据实际分别构建dao、service等的编译、测试等环节。当然,Maven的聚合与继承功能,更加方便了我们的项目组织及管理。
三、总结
我再汇总一下我所谈到的重点:
1> eclipse对maven的支持:熟练去使用m2eclipse插件,有助于帮助我们快速去定位相关问题,并能够夯实maven相关理论知识;
2> maven核心理论:坐标及依赖、仓库、生命周期和插件、聚合和继承;
3> 借助maven的聚合和继承特征,如何去组织并管理我们的项目
OK,《Maven实战》里面其他的细节理论及操作在这里就不说了。
欢迎大家来补充。最后,把这本书的封皮挂在这里——

《Maven实战》关联实际工作的核心知识的更多相关文章
- 《Maven实战》笔记-1-Maven使用入门
<Maven实战>徐晓斌 2011 机械工业出版社 一.介绍 1.名词 artifact:插件 极限编程XP 2.构建脚本: maven——pom.xml(Project Object ...
- Maven实战:Maven生命周期
前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解 ...
- Maven实战之Quick Start
Introduction Maven是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署.通过Maven,我们只需要输入简单的命令(如mvn clean i ...
- 【转】Maven实战(九)---模块聚合和继承
原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831 感谢! 类之间有聚合和继承关系,Maven也具备这样的设计原 ...
- Maven实战(九)---模块聚合和继承
类之间有聚合和继承关系,Maven也具备这种设计原则. 那么Maven的pom是怎样进行聚合与继承的呢? 一.什么是聚合?为什么要用聚合? 上一篇博客介绍了模块化的基本知识. 有了模块化,那么我们项目 ...
- 《Maven实战》
原创作者: 许晓斌 阅读:61148次 评论:19条 更新时间:2011-06-23 你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven ...
- 学习笔记——Maven实战(一)坐标规划
坐标是什么?为什么要规划? 坐标是Maven最基本的概念,它就像每个构件的身份证号码,有了它我们就可以在数以千万计的构件中定位任何一个我们感兴趣的构件.举个最简单的例子,如果没有坐标,使用JUnit的 ...
- 学习笔记——Maven实战(六)Gradle,构建工具的未来?
Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...
- 学习笔记——Maven实战(七)常用Maven插件介绍(上)
我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...
随机推荐
- Oracle 字符集常见字符集及解决方案
Oracle 字符集常见字符集及解决方案 优先级别:alter session>环境变量>注册表>参数文件 一.查看字符集: 1.查询服务端字符集: select userenv(' ...
- 蛋疼的Action.c (141): undeclared identifier `LAST'异常
之前这个脚本运行了很久都没有问题,今天突然在场景运行不了: Action.c (141): undeclared identifier `LAST' 害的老子一直在纠结,这个关联函数没有问题啊,怎么一 ...
- css3导航鼠标经过移动、缩放、转动、拉长、拉伸
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Elasticsearch 5.4.1 安装简易文档
1. 系统安装JDK 1.8.0_131或以上版本的JDK 2. 创建软件安装目录 # mkdir -p /opt/software3. 创建elk用户,新版的ELK不在支持使用root账户运行程序, ...
- 打造一款1kb大马并且处理D盾以及安全狗拦截与查杀
在之前sky666提到了关于大马被waf拦的问题,我决定手动去过一下bypass.可是发现怎么也过不去查杀,更别说拦截了.对此无奈,只好花了个通宵去处理一下.顺便一提,理论过所有Waf,并且被杀只需要 ...
- php 的加法
无意间看到了php中关于加,减,乘,除 的计算方法 这里 http://lxr.php.net/source/xref/PHP-5.6/Zend/zend_operators.h#596 static ...
- Tutorial 01 4,5题
.任务四: 程序设计思想:利用Math.random()产生一个char类型的字符,再利用for循环是他们相加,最后将他们放在一个消息框中输出. 程序流程图: 源程序: p ...
- JavaScript DOM编程艺术 笔记(一)
探测浏览器品牌版本代码-----浏览器嗅探 代码 JavaScript==ECMAScript java几乎可以部署在任何环境,js只应用于web浏览器 API是一组得到各方面共同认同的基本约定(元素 ...
- (STM32F4) SysTick理解使用
關於Cortex System Timer (Systick) 網上隨便google就可以找到許多相關範例. 他就是ARM提供的一個24-bit的下數(count-down)計時器我看大部分應用都是提 ...
- rinetd做代理!redis做代理使外网直接远程连接
Centos7下Rinetd安装与应用 Linux下做地址NAT有很多种方法.比如haproxy.nginx的4层代理,linux自带的iptables等都能实现.haproxy.nginx就不说 ...