和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编辑
■ 图形化依赖分析
在 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项目。
较之于创建新的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 表现得更好。
现在详细介绍一下如何导人本地Maven项目:选择上图中的Existing Maven Projects选项,然后在弹出的对话框中选择本地项目所在的目录,如下图所示。 m2eclipse 能够自动识别出目录中所包含的Maven项目,如果发现是多模块项目,则会列出所有的模块。用户可以根据自己的需要选择要导人的模块,然后单击Finish按钮二 m2eclipse 会执行导人项目信息、更新下载项目依赖,以及重建工作区等操作,根据实际项目的情况,这个过程可能花费几十秒到十几分钟:
通常我们的项目源代码都存储在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 构建。
有了 m2eclipse ,用户可以直接在Eclipse中浏览 本地 和 远程的Maven仓库 ,并且能够基于这些仓 库的索引 进行 构件搜索 和 Java类搜索 。这样就免去了离开Eclipse访问本地文件系统或者浏览器的麻烦,提高了日常开发的效率。
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 类.
有了仓库索引之后,用户就可以通过关键字搜索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 还提供了丰富的可视化界面帮助用户分析项目中的各种依赖以及它们之间的关系。
在 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保存。
介绍了如何使用 maven-dependency-plugin 分析并优化项目的依赖,Maven用户可以在命令行以树状的形式查看项目的依赖以及它们之间的关系;有了 m2eclipse ,这种可视化的分析将更为清晰和直观。
开启POM编辑器中的 依赖层次项 (Dependency Hierarchy),就能看到图下图所示的依赖层次图。
上图中左边列表显示了项目的树形依赖层次,右边列表则是所有Maven最终解析得到的依赖。默认情况下,两个列表都会显示依赖的artifact、versIon以及scope。要查看依赖的groupld,可以单击列表上方右起第二个按钮Show Groupld。
有了这样一个依赖层次图,用户就能很清晰地看到所有依赖是如何进入到项目中来的,可能这是个 直接依赖 ,那么在左边的它就是个 顶层节点 ;可能这是个 传递性依赖 ,那么这个 树形层次 就能够告诉用户 传递路径 是什么;如果这个依赖是 同一Maven项目的另外一个模块 ,那么它的图标将与其他依赖不同,而是一个 文件夹的样子 ,如果用户单击右边已解析依赖列表中的任意一项,左边就会自动更新为该依赖的传递路径。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利