译自:http://www.sonatype.com/about/press/20090122-JDJm2eBringingMavenToEclipse
Maven 长 Eclipse 所短,反之亦然
M2e起步
不要轻易相信我的话;根据我们创建的软件来判断m2e项目。虽然为了让Maven和Eclipse项目完美结合,还有一些集成工作要做,但该项目已经发布了十分强大的Eclipse插件。下面的小节,我会仔细介绍一些m2e项目有趣的变革性的特性。
安装m2e
要安装m2e,打开Eclipse 3.4(Ganymede)。如果你还没有下载和安装Eclipse,你可以从http://www.eclipse.org 获得 Eclipse 3.4 。在Eclipse中,从Help菜单选择 Software Updates…。在Software Updates and Add-ons 对话框中,点击 Available Software 按钮,然后点击 Add Site… 添加更新站点URL:http://m2eclipse.sonatype.org/update/ 。在你添加了该URL之后,你将能够为你的项目添加 Maven Integration, Maven Optional Components,和Maven Project Configurators。如果你计划在m2eclipse插件中使用Subclipse,Mylyn,以及AspectJ集成,你也需要安装这些插件。关于安装m2eclipse的完整的指令,见Maven权威指南的m2eclipse章节 。下载和安装m2eclipse需要花一段时间,一旦安装过程完成,Eclipse会建议你重启IDE。
一旦安装过程结束,你将能够点击浏览m2eclipse。下面的小节,我会介绍一些m2eclipse插件中十分有趣的功能。
从Maven骨架创建一个Maven项目
Maven骨架是一个类新项目的模板,Maven仓库包含了很多骨架,包含了从web应用程序到消息组件的几乎所有类型项目。有了m2eclipse,使用Maven骨架变得十分容易,只要填写一个简单的New Maven Project对话框,然后从中央仓库的骨架列表中选择一个骨架。如果有人向Maven仓库发布了一个Maven骨架,m2eclipse会在请求仓库索引的时候发现这个骨架。要使用Maven骨架创建一个Maven项目(见下图),选择File -> New -> Project… , 然后在过滤字段输入maven。选择新的Maven项目然后点击Next。下一个屏幕会提供一个界面让你选择新项目的Maven骨架。该列表包含了很多M2eclipse自带的Maven骨架。
这个列表是由叫做Nexus Indexer的东西生成的。Nexus Indexer是一个包含了整个Maven仓库索引的文件。它由Nexus仓库管理器 生成。
从POM具体化一个Maven项目
M2eclipse也能让你“具体化”一个Maven项目。具体化和从Subversion签出一个Maven项目的过程类似,但现在不再是手工的输入项目Subversion仓库的URL,该URL现在从项目跟POM文件中发现。如果一个POM文件包含了正确的元素声明了源码仓库的位置,你可以使用该功能从仅仅一个POM文件“具体化”项目。使用该特征,你可以浏览Maven仓库中的项目,然后将其具体化到Eclipse项目中。如果你的项目依赖于第三方的开源类库,并且你需要接触其源码,该功能就十分方便。你不再需要寻找其web站点,寻找去哪里签出源码,只要简单的使用m2eclipse来“具体化”这个项目。
搜索依赖和构件
从Maven仓库中快速搜索和定位依赖能极大的节省时间。有了m2eclipse,你不再需要为一个版本的构件去找遍中央仓库。如果你需要为Maven项目添加一个构件,在项目上右击,然后选择Maven菜单下的Add Dependency。之后,你会看到如下图的对话框。简单的输入groupId和artifactId会让m2eclipse搜索一个Maven仓库的Nexus索引,并显示匹配的构件。快速定位构件意味着你不再需要花无数的时间在Maven仓库中点来点去,寻找一个特定的依赖构件。
分析依赖树
M2eclipse提供了一些有趣的功能让你分析并绘制项目依赖的图表。你可以通过点击项目的pom.xml来载入POM编辑器。如果m2eclipse正确安装了,你会看到POM编辑器,而非POM XML。如果打开了一个带有很多依赖的项目,你可以点击POM编辑器的Dependency Tree选项卡,然后看到依赖以两列的形式显示,如下图。面板左边显示了一个依赖树。树的第一层包含了项目所有的直接依赖,每下一层列出了依赖的依赖。左边的部分能让你很轻松的弄明白一个特定的依赖是如何进入你项目的已解析依赖中的。右边的面板显示了已解析依赖。这是在所有冲突和范围都应用后的有效依赖列表,也是你项目用来编译,测试,和打包的有效依赖列表。
如果你想要以图的形式查看依赖,点击Dependency Graph选项卡查看项目依赖图(如下图)。点击图中的一个节点会标亮该节点并强调项目依赖中该构件和其它构件的关系。
使用Maven构建Eclipse:Tycho
如Eclipse的PDE,Tycho构建插件和更新站点供Eclipse平台使用。Tycho可以使用pom.xml或者Eclipse的本地元数据文件如manifest.mf和feature.xml来构建Eclipse插件。Maven的一个长期努力是基于不同种类的项目元数据构建项目,Tycho是其中的一部分。在本文撰写的时候,Tycho正被一些组织和开源项目(包括m2eclipse)用来构建Eclipse插件。Tycho是Eclipse开发者使用Maven自动化Eclipse插件构建的最直接的方式。共享字节码的故事在Eclipse的世界中变得模糊。有Eclipse发布包,更新站点,P2仓库,动态条款(dynamic provisioning),OSGi仓库的不同提议,甚至一些Eclipse包被签入到Maven仓库中。Sonatype致力于帮助Eclipse社区创建开放的,可互操作的仓库和元数据,这将有益于所有用户,Tycho是让Maven和Eclipse互操作的第一步。
结论
接触新的代码是困难的工作:你需要找到它并弄明白如何与之工作。Nexus索引使寻找构件变得容易,POM让理解项目变得容易,m2eclipse使得在Eclipse中使用Maven变得简单。我相信Eclipse世界会从Maven学到一些技巧,并开始使用Maven元数据和插件。对于那些编写开发工具的人,我相信一个Maven mojo是编写一个工具所需要的最少的工作量,它不仅能在命令行运行,同样能在Eclipse中运行。我同样相信Eclipse插件可以使用Maven POM信息和依赖管理功能来实现其自身的目的。我对这份工作充满期望,并邀请所有人加入并享受结果。请访问http://eclipse.org/m2e 。