m2eclipse简介
和Nexus一样,m2eclipse也是Sonatype出品的一款开源工具,它基于Eclipse Public License-v.10开源许可证发布,用户可以免费下载并使用,还可以查看其源代码,nexus的官方站点地址为:http://www.sonatype.org/nexus/。
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项目的另外一个模块,那么它的图标将与其他依赖不同,而是一个文件夹的样子,如果用户单击右边已解析依赖列表中的任意一项,左边就会自动更新为该依赖的传递路径。