Maven学习第3期---m2eclipse使用
一、m2eclipse简介
和Nexus一样,m2eclipse也是Sonatype出品的一款开源工具,它基于Eclipse Public License-v.10开源许可证发布,用户可以免费下载并使用,还可以查看其源代码m2 eclipse的官方站点地址为http://m2eclipse.sonatype.org/。
m2ecIipse为Eclipse环境提供了全面丰富的Maven集成 它的主要功能如下:
■ 创建和导人Maven项目
■ 管理依赖并与Eclipse的cIasspath集成
■ 自动下载依赖
■ 自动解析依赖的sources 与javadoc包
■ 使用Maven Archetype创建项目
■ 浏览与搜索远程Maven仓库
■ 从Maven POM具体化一个项目
■ 从SCM仓库签出Maven项目
■ 自动适配嵌套的多模块Maven项目至Eclispe
■ 集成Web Tools Projects (WTP)
■ 集成Subclipse
■ 集成Mylyn
■ 可视化POM编辑
■ 图形化依赖分析
二、m2eclispe的简单使用
2.1 新建Maven项目
在m2eclipse中新建一个Maven十分简单,在菜单栏中依次选择File→New→Other。这时可以看到下图所示的向导:
选择Maven Project之后,向导会提示用户选择是否跳过archetype而创建一个最简单的Maven项目,这个最简单项目将只包含最基本的Maven项目目录结构,读者可以根据自己的需要进行选择。
如果选择使用Archetype创建项目,单击Next按钮之后,向导会提示用户选择Archetype,如下图所示
如上图所示,有4个Archetype Catalog可供用户选择,包括maven-archetype-plugin内置的Intemal、本地仓库的Default Local、m2eclipse下载到仓库索引中包含的Nexus Indexer,以及所有这3个合并得到的All Catalogs。如果对Archetype Catalog不是很清楚。一般来说,只需要选择Internal。然后再选择一个Archetype,如maven-archetype-quiCk-start,最后单击Next按钮。
接下来要做的就是输入项目坐标Group Id、Artifact Id、Version以及包名。这一个步骤与在命令行中使用Archetype创建项目类似,如果Archetype有其他可配置的属性,用户也可以在这里一并配置,如下图所示。
单击Finish按钮之后,m2eclipse就会快速地在工作区创建一个Maven项目,这同时也是一个Eclipse项目。
2.2 导入Maven项目
较之于创建新的Maven项目,实际工作中更常见的是导人现有的Maven项目。m2eclipse支持多种导入的方武,其中最常用的是导人本地文件系统的Maven项目以及导入SCM仓库中的Maven项目。
单击菜单栏中的File,然后选择Import开始导人项目,如下图所示:
从上图中可以看到在Maven类中有4种导人方式,常用的就是第一种和第二种,即导入SCM仓库中的Maven项目和导入本地文件系统的Maven项目。图中的Install or deploy an artifact to a Maven repository能让用户将任意的文件安装到Maven的本地仓库。如果该文件没有对应的POM,则需要为其定义Maven坐标。 图中的Materialize Maven Projects能让用户导人第三方的Maven项目,用户只需要提供一些关键字如nexus-api,然后选择要导人的项目,m2eclipse就能基于索引找到其对应的POM信息。如果该POM中包含了SCM信息,m2eclipse就能直接下载该项目的源码并导人到m2eclipse中。当用到某个第三方类库,同时想研究其源码的时候,这一特性就非常有用,你不再需要打开浏览器去寻找该项目的信息,简单地在m2eclipse中操作几步就能完成第三方项目的导人。当然,这一特性的前提是第三方类库提供了正确的SCM信息。大多数开源项目在往Maven中央仓库提交构件的时候都会提供完整的信息,但也有例外,为了避免信息不完整的项目进入Maven中央仓库,最新的规则已经强制要求提交者提供完备的信息,如SCM、许可证以及源码包等。这无疑能帮助m2eclipse表现得更好。
2.2.1 导入本地Maven项目
现在详细介绍一下如何导人本地Maven项目:选择上图中的Existing Maven Projects选项,然后在弹出的对话框中选择本地项目所在的目录,如下图所示。m2eclipse能够自动识别出目录中所包含的Maven项目,如果发现是多模块项目,则会列出所有的模块。用户可以根据自己的需要选择要导人的模块,然后单击Finish按钮二m2eclipse会执行导人项目信息、更新下载项目依赖,以及重建工作区等操作,根据实际项目的情况,这个过程可能花费几十秒到十几分钟:
2.2.2从SCM仓库导入Maven项目
通常我们的项目源代码都存储在SCM仓库中,例如Subversion仓库,读者当然可以使用Subversion命令将项目源码签出到本地,然后再导入到m2eclipse中,但m2eclipse支持用户直接从SCM仓库中导人Maven项目。
要从SCM导人Maven項目,首先需要确保安装了集成SCM的Eclipse插件,如Subclipse,还需要m2eclipse的附属组件Maven SCM Integration以及对应的SCM handler,如集成Subclipse的Maven SCM handler for Subclipse。如果这些组件都得以正确安装,就可以选择下图中的Check out Maven Projects fromSCM:
在单击Next按钮之后,选择SCM类型并输入SCM地址,如下图所示:
单击Next按钮之后,用户可以选择项目导入的本地位置,然后单击Finish按钮,m2elipse就会在后台使用SCM 工具签出项目许执行Maven构建。
三、访问Maven库
有了m2eclipse,用户可以直接在Eclipse中浏览本地和远程的Maven仓库,并且能够基于这些仓库的索引进行构件搜索和Java类搜索。这样就免去了离开Eclipse访问本地文件系统或者浏览器的麻烦,提高了日常开发的效率。
3.1 Maven仓库视图
m2eclipse提供了Maven仓库视图,能让用户方便地浏览本地及远程仓库的内容,不过默认情况下该视图不被开启。要开启Maven仓库视图,依次选择Eclipse菜单栏中的Windows→Show View→Other选项,Eclipse会弹出一个对话框让用户选择要打开的视图,选择Maven类下的Maven Repositories,如下图所示:
这时可以在Eclipse窗口下方看到Maven仓库视图,这个视图中包含了4类Maven仓库,分别为:
■ 本地仓库
■ 全局仓库
■ 项目仓库
■ 自定义库
如下图所示:
其中,本地仓库包含了Maven的本地仓库以及当前Eclipse工作区的项目;全局仓库默认是Maven中央仓库,但是如果在settings.xml中设段了镜像,全局仓库就会自动变更为镜像仓库。最后,如果当前Maven项目的pom. xml中配置了其他仓库,它们就会被自动加入到项目仓库这一类中。这些仓库的信息来源于用户的settings. xml文件和工作区中Maven项目的pom.xml文件。
用户可以以树形结构快速浏览仓库的内容,双击叶子节点,打开构件对应的POM文件,如下图所示。
大家可能已经猜到,m2eclipse其实不会真正地去存储所有仓库的内容,那样需要消耗大量的磁盘及网络带宽。因此与Nexus一样,m2eclipse使用nexus-indexer索引仓库内容的信息。以全局仓库central为例,用户在首次使用m2eclipse的仓库浏览及搜索功能之前,需要构建该仓库的索引,在如下图所示的仓库上右击。
快捷菜单中的Rebuild Index让m2eclipse重新下载完整的远程索引,由于当前仓库是central,索引文件较大,因此重建该索引会消耗比较长的时间。Update Index则让m2eclipse以增量的方式下载索引文件。如果是本地仓库,Update Index将无法使用,而Rebuild Index的效果是重新遍历本地仓库的文件建立索引。
上图中的菜单还有几个选项,Disable Index Details让m2eclipse关闭该仓库的索引,从而用户将无法浏览该仓库的内容,或者对其进行搜索。Minimum Index Enabled表示只对仓库内容的坐标进行索引,而Enable Full Index不仅索引仓库内容的坐标,还索引这些文件所包含的Java类信息,从而能够支持用户搜索仓库中的Java类.
3.2 搜索构建和java类
有了仓库索引之后,用户就可以通过关键字搜索Maven构件了。单击Eclipse菜单栏中的Navigate,再选择Open Maven POM选项,就能得到构件搜索框。输入关键字后就能得到一个结果列表,还可以点击列表项进一步展开以查看版本信息,如下图所示。双击某个具体版本的构件,能让m2eclipse直接打开对应的POM文件。
如果为仓库开启了Enable Full Indexdt选项,也就是说索引中包含Java类型信息,则就可以通过Java类名的关键字寻找构件。单击Eclipse菜单栏中的Navigate,再选择Open type from maven就能得到类搜索框。输入关键字后,就能得到下图所示的搜索结果。同样,用户可以单击列表项展开其版本,还可以双击具体版本打开其POM。这样不用离开Eclipse,用户就能随时搜索想要使用的类库以及Java类,m2eclipse仅仅要求用户提供一些必要的关键字,这无疑是非常方便的。
四、管理项目依赖
添加Maven依赖的传统做法是先搜索得到依赖的坐标,然后配置项目的pom. xml文件,加入dependency元素。当然,在m2eclipse中也可以这样做,不过m2eclipse提供了更方便的添加依赖的方法,用户直接根据关键字搜索依赖并从结果中选择即可。此外,m2eclipse还提供了丰富的可视化界面帮助用户分析项目中的各种依赖以及它们之间的关系。
4.1 添加依赖
在m2eclipse中有多种添加依赖的方法,直接编辑pom.xml是一种,不过这里要讲的是另外两种更方便的做法。
第一种
首先用户可以在项目上或者pom. xml上右击,然后选择Maven,再选择Add Depenclency添加依赖,如下图所示:
在弹出的对话框中,用户只需要输入必要的关键字,然后选择要添加的依赖及版本,并且设定正确的依赖范围,单击OK按钮之后,依赖就被自动加入到pom.xnil中,如下图所示,就为项目添加了javax.servlet:servlet-api:2.5这样一个依赖,并且在图的下方选择了provided这样的一个范围。
第二种
第二种快速添加依赖的方式是使用m2eclipse的POM编辑器。默认情况下,用户双击项目的pom.xml就能打开POM编辑器,POM编译器下方有很多选项卡,包括概览、依赖、插件、报告、依赖层次、依赖图、Effective POM等。其中,依赖(Dependencies)一项可以用来添加、删除和编辑依赖,如下载所示。
注意:如果,双击看不到上面的界面。可能是因为,安装的m2e插件本身就是不全的,里面根本没有pom editor。所以需要下载pom editor的zip包:
http://download.csdn.net/detail/honestjiang/8508393
解压之后,直接放到原来那个m2e的插件包 的plugin下面即可,即m2eclipse\eclipse\plugins\org.eclipse.zest.XXX的两个zip,重启之后,右 键pom.xml即有pom editor打开方式了。
单击上图中上方的Add按钮,就能得到如下图所示的添加依赖对话框:
此外,从图中还可以看到,用户可以查看依赖的细节并对其进行编辑。添加项目依赖之后,如果m2eclipse没有自动将依赖更新至项目的构建路径,用户可以强制要求m2eclipse更新,方法是在项目或者pom. xml上右击,选择Maven,再选择Update Dependencies或ctrl+S保存。
4.2 分析依赖
介绍了如何使用maven-dependency-plugin分析并优化项目的依赖,Maven用户可以在命令行以树状的形式查看项目的依赖以及它们之间的关系;有了m2eclipse,这种可视化的分析将更为清晰和直观。
开启POM编辑器中的依赖层次项(Dependency Hierarchy),就能看到图下图所示的依赖层次图。
上图中左边列表显示了项目的树形依赖层次,右边列表则是所有Maven最终解析得到的依赖。默认情况下,两个列表都会显示依赖的artifact、versIon以及scope。要查看依赖的groupld,可以单击列表上方右起第二个按钮Show Groupld。
有了这样一个依赖层次图,用户就能很清晰地看到所有依赖是如何进入到项目中来的,可能这是个直接依赖,那么在左边的它就是个顶层节点;可能这是个传递性依赖,那么这个树形层次就能够告诉用户传递路径是什么;如果这个依赖是同一Maven项目的另外一个模块,那么它的图标将与其他依赖不同,而是一个文件夹的样子,如果用户单击右边已解析依赖列表中的任意一项,左边就会自动更新为该依赖的传递路径。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
Maven学习第3期---m2eclipse使用的更多相关文章
- Maven学习第4期---Maven简单使用
一.Maven常用命令 在学习使用Maven构建项目之前,先来了解一下Maven一些实用的命令.mvn的命令有很多,在项目开发中,理解了下面的几个常用命令后,运用maven就基本没有问题了.Maven ...
- Maven学习第2期---Maven安装配置
一.Maven介绍 1.1 何为Maven Maven这个词可以翻译为"知识的积累",也可以翻译为"专家"或"内行".Maven是一个跨平台 ...
- Maven学习第1期---Maven简单介绍
前言 Hadoop的MapReduce环境是一个复杂的编程环境,所以我们要尽可能地简化构建MapReduce项目的过程.Maven是一个很不错的自动化项目构建工具,通过Maven来帮助我们从复杂的环境 ...
- Maven学习 (三) 使用m2eclipse创建web项目
1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 3.下一步默认配置,使用默认的工作空间,或者你可以自己选择其他的空间 ...
- maven学习3,如何创建一个web项目
Maven学习 (三) 使用m2eclipse创建web项目 1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...
- TODO maven学习笔记
maven是什么? 我的体会 我理解得maven就是一个构建工具,可以做一些项目得整合操作,我们把一些常见得操作,封装在maven里面,并给它命名成 clean,test,compile,这些步骤都是 ...
- Maven学习- 使用Maven构建Web项目
从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Maven构建一个Web项目,找到一篇文档,主要都是从这里学到的: 下载地址:使用Eclipse构建Maven的Web项目.docx 现自己在 ...
- 【Maven学习】Nexus OSS私服仓库的备份与迁移
背景 在上一篇博客 [Maven学习]Nexus OSS私服仓库的安装和配置 中,我们已经在机房搭建好了新的Nexus OSS私服仓库.下面是两个版本的Nexus OSS私服仓库的对比图. 老的Nex ...
- Maven学习-目录结构
在前一篇文章中,我们介绍了什么是Maven,以及如何用Maven来构建我们的项目.不了解Maven的童鞋,可以看这里Maven学习-入门.在这篇文章中,我们将学习Maven的项目的目录结构相关的内容. ...
随机推荐
- How do I install Daydream on my phone?
Google's philosophy with their newest VR platform is simple. In order to offer the best possible exp ...
- python--文件流读写
在讲述fileinput模块之前,首先说一下python内置的文件API—open()函数以及与其相关的函数. 我这里主要讲讲其中四个比较重要和常用的方法,更多的方法,可以参考:菜鸟教程http:// ...
- Verilog实现模长等于六十的二进制编码计数器
注释都加上了 由于参考网上的代码,其实现了置数 ,使能等功能,一并加上了 编译结果能通过 百度网盘文件下载:https://pan.baidu.com/s/1IVTD19NRk-s2dKBXtATkA ...
- 智能POS承接口碑点餐FAQ
1.一体机正餐后付(正餐6.0.0.8),口碑订单在商家后台无优惠(小票上有),但实收不等于订单金额. 原因:订单回流问题(线上线下数据没有及时回流造成的):造成这个问题的操作: 1.在线下加菜线上同 ...
- Linux 最小化安装后IP的配置(手动获取静态IP地址)
一.图形化界面配置(假设为电脑A) 如果你的Linux安装有图形化界面,那么通过以下方式来配置: 我这里是有两块网卡,第一个网卡在上篇中已经通过DHCP来配置了:Linux 最小化安装后IP的配置(D ...
- oracle中print_table存储过程介绍
一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面.但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_t ...
- return ||和return && 区别
return a && b 如果a是true的话,返回b,否则返回a return a || b 如果a是true的话,返回a,否则返回b
- Java的基础知识二
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- LeetCode算法题-Min Stack(Java实现)
这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小 ...
- Java序列化(含transient)
什么是序列化? 我们创建的对象只有在Java虚拟机保持运行时,才会存在于内存中.如果想要超出Java虚拟机的生命周期,就可以将对象序列化,将对象状态转换为字节序列,写入文件(或socket传输),后面 ...