`
juvenshun
  • 浏览: 1588590 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

m2e:为Eclipse引入Maven(上)

阅读更多

译自:http://www.sonatype.com/about/press/20090122-JDJm2eBringingMavenToEclipse

Maven Eclipse 所短,反之亦然

by Jason Van Zyl

这里我要介绍m2e 项目,它联结了Maven的能力和Eclipse的可用性。本文中,我会讲述我们对于m2e项目的计划:目前它是什么,将来会朝什么方向发展?M2e不仅仅是Eclipse的一个Maven插件。虽然这是m2e项目很重要的一部分,但Sonatype放眼于更大胆的目标。我们使用m2e项目,通过提供Maven作为构建Eclipse插件和Eclipse平台的解决方案,给Eclipse带来稳定的构建自动化过程。M2e项目正帮助驱动Maven 3平台的需求,驱动Tycho和Mercury等项目,这些项目承诺会改变开发人员和组件及仓库交互的方式。本文简要的概述m2e今天能做什么,有哪些特性正处于开发阶段。对于Eclipse和Maven来说,有很多惊人的,革命性的变化正在到来。

 

为什么m2e不同

之前有很多关于结合Maven和Eclipse的尝试,是什么让m2e与它们不同呢?Aapche Maven和Eclipse有一段努力集成的历史,虽然曾经有基于Eclipse的Maven插件先于m2e,但我们没有看到一种方案是真正的集成插件。之前插件提供的方案是在Eclipse中启动一个Maven构建,并且使用一个GUI编辑器来配置Maven POM,但是这总是会丢失一些东西。所有这些插件认为Maven是一个外部的工具,而在Eclipse平台中启动该工具。这些工具的目标都是使用Eclipse作为一个包裹Maven的外壳。但在Eclipse中启动Maven只是问题的一半。如果要使用Maven来管理并构建Eclipse组件又该如何?


M2e正帮助驱动Maven 3平台以其一些工具的变更。比如Tycho,它可以用来在Maven中构建和管理Eclipse组件。你应该将m2e看成是一项消除Maven和Eclipse平台隔阂的工作,而不是为Eclipse创建一个Maven插件。当然,m2e为Eclipse提供了稳定的Maven插件,但作为该集成的一个副作用,它能让你在一些引用了Eclipse平台相同OSGi组件的项目中使用Maven来构建Eclipse插件。M2e项目正驱动Maven架构的革新,能让用户与多种仓库格式交互,而且,由于m2e的工作,开发人员将能够使用Maven来构建和管理OSGi组件。

在我们开始m2e项目的时候,Eugene Kuleshov和我决定坐下来挖掘两个平台的细节,找出结合它们的正确方式。我们很快得出结论:成功的集成需要更改Maven的架构,使其变得更容易可插入。还需要一些新的开发工作能让Maven与Eclipse开发中不同的仓库格式交互。在满足初始愿景的前进过程中我们做得很好,在这完成之后,不仅仅Eclipse会有稳定的Maven集成,Maven也会成为构建Eclipse平台的一种可行的解决方案。M2e的不同之处在于,它不仅仅为Eclipse带来的Maven的力量,它是两条河流的交汇,帮助驱动两个平台的变革。

 

为Eclipse引入Maven(以及为Maven引入Eclipse)

当我和人们讨论为Eclipse引入Maven的时候,它们更倾向于使用社会的和科学的隐喻来描述所有可能性。这是一段“联姻”,一段“舞蹈”,一段交织的“DNA双螺旋”,或者两个星系碰撞成一个缓慢的,剧烈的,但有趣的物质和能量的交换。归并两种各自都有“可选方案”和项目建模及构件的技术,是一个有趣的挑战,然而我们欢迎这类有趣的问题,因为这也是学习的机会,并能反馈给Maven。我们基于集成的工作对Maven做了一些改变,我们使得Maven更高效,更苗条,以为那些可能在Eclipse中使用Maven的人们提供更快更易控制的体验。虽然我们仍然还未定居在Eclipse基金会中,但你可以为Eclipse下载和使用叫做m2eclipse的完整的Maven插件。此外,虽然还只是一个开始,你已经可以使用开发发布工具如Tycho来开始用Maven自动化你的Eclipse插件构建。

本小节的标题可能有一些误导,我们并不是将Maven“移动”到Eclipse中,而且,你可以放心确认我们没有为Maven实现一些新的,只有通过基于Eclipse GUI才可用的特性。Apache Maven是Apache软件基金会成员中一个健康增长的社区。对使用Eclipse不感兴趣的Maven用户不会被这次集成所影响,但那些使用Eclipse的用户会体验到这里强有力合并带来的好处。有了m2e,用户不用求助于PDF文档之类的东西,就可以引入Maven构件并构建Maven项目。有了m2e,应用程序开发者就能够在几秒钟内从数百个Maven骨架中找出一个来创建一个新的项目,而且现在开发人员只需简单的点击按钮,可以访问Nexus仓库索引来搜索并添加依赖。有了m2e,Eclipse工具开发人员就能够在开发Eclipse的时候使用Maven插件来读取Maven元数据,发布工程师可以使用m2e生成的工具来构建Eclipse插件,部署Eclipse发布包。

你不认为这是最后的部分,对不对?使用Maven构建Eclipse?Maven应该不用运行Eclipse就能够构建Eclipse,RCP,以及OSGi应用程序,就像其它Maven构建那样使用命令行或者在持续集成环境中。Tycho是一个用来构建OSGi应用的Maven插件,你可以从m2eclipse运行Tycho,也可以在其它Maven构建中使用它。集成工作不是简单的让开发者可以在Eclipse中使用Maven,我们预计Eclipse和Maven的“联姻”对两者来说都会是一种转变。为Eclipse引入Maven改变了一切。

 

Maven和Eclipse:强大的同盟

消除Eclipse和Maven之间的隔阂到底意味着什么?本节,我们浏览一下Eclipse和Maven的差异,并且讨论一些集成能给两个平台相互带来好处的区域。我们使用术语axis来表示那些Maven和Eclipse互补的地方。让我们看一下这些互补的axis:

  • 用户交互
  • 项目建模
  • 管理构件
  • 编写扩展和插件
  • 项目约定


用户交互

Maven擅长命令行构建和自动化构建,而Eclipse则是交互式构建的黄金标准。使用Maven,我们通过文本编辑器来观察理解复杂多模块Maven构建的输出。使用Eclipse,一个大型的构建可以被管理成交互式的;编译问题和测试失败通常可以通过点击一个按钮就定位和解决。虽然Eclipse作为一个IDE在交互式构建中表现的非常优秀,但是让Eclipse作为一个持续集成工具或者命令行工具会非常困难,因为像CruiseControl或Hudson这样的工具需要构建能够完全的从命令行运行。在m2e之前,帮助理解Maven项目和依赖的UI支持仅限于一些静态的web页面和报告,也没有很好的方法在自定义编辑器中编辑pom.xml,以及搜索Nexus仓库索引,添加依赖等等。Maven可以为Eclipse带来命令行构建自动化支持,Eclipse可以给Maven带来强大的可视化交互性和交互式报告能力。

 

项目建模

Maven集成了项目对象模型(POM),而Eclipse的项目模型是分散的。Maven POM拥有一个项目工作的全部信息:开发者名称,SCM信息,问题追踪URL,依赖,许可证信息,以及组件描述信息。Eclipse则倾向于为许多不同的插件的每一方面拥有不同的元数据,而这些插件元数据的格式依赖于插件开发者的设计风格。当人们开始对Mylyn问题追踪系统或者ECF开发者聊天工具等特性感兴趣的时候,协调和控制这些元数据的访问成为了工具集成的一个不安因素。

 

管理构件

Eclipse让源代码相关工作变得十分简单,这得益于content-assist,快速修复,以及高级重构操作的支持。在Eclipse中,二进制文件则是另外一回事了;它对寻找或管理项目创建和依赖类库JAR文件的支持非常少。而另一方面,Maven使得依赖构件及构建产品相关的工作变得十分简单,这得益于Maven中所有构件都有注册名称和版本,本地和远程的索引能让你快速找到任何仓库中的代码,元数据,类,以及POM,并直接拉到你的项目中。将Maven的力量带到Eclipse IDE中能让开发者创建依赖图,使用一个Maven仓库的Nexus索引搜索构件。

 

编写扩展和插件

Eclipse和Maven都为编写扩展和插件提供了API和框架。Eclipse拥有一个十分丰富的模型提供很多的集成机会,它有一个很大的API需要XML文档描述组件和声明需求和依赖。Maven为Maven插件开发使用一个简单的POJO方式,它使用了依赖注入。将Maven引入Eclipse能让Eclipse用户访问数以百计的现存的Maven插件,这些插件包括了运行一个内嵌的Jetty实例,以及生成项目源码报告等等。有了Maven,工具开发者能够不用考虑在哪里运行就编写工具,用户简单的配置就能得到Eclipse支持。采用Maven的项目模型来为Eclipse组件建模能让Eclipse开发者使用Maven来构建Eclipse插件和组件。

 

项目约定

Eclipse使用了于项目见扁平的关系来支持无限种类的项目结构,而Maven鼓励项目结构使用通用的约定,并支持层次结构的项目。使用Maven,元数据和构建坐标可以在一个父POM或者聚合POM中指定,而不用分散到一组相互关联的项目中。虽然两者都支持不同构建步骤的配置,Maven使得理解一个未知的项目更容易,并更易协调多模块构建。一旦Eclipse开发者开始理解Maven的约定并开始使用Tycho之类的工具来构建Eclipse,非Eclipse开发者构建和理解Eclipse组件和插件就会变得容易得多。集成Eclipse和Maven能帮助扩展Eclipse开发者社区,为那些对构建Eclipse插件并作贡献感兴趣的人降低进入的门槛。


融合技术

这些axis定义了Maven和Eclipse能相互获益的区域。虽然完全实现高层次的协调有些十分困难的问题,但我相信Maven和Eclipse都会从这个过程中获益。一个特殊的区域能展示Maven可以为Eclipse带来好处,这就是classpath容器。因为Eclipse允许插件定义能被其它插件引用的classpath容器,m2e就能够帮助那些想要使用maven依赖管理功能的插件。有了这个新的功能,插件就可以使用m2e提供的classpath容器来访问那些使用Maven的项目的classpath。

一个Eclipse改变Maven的例子是在项目元数据方面。Eclipse已经有一个分布式的项目和依赖模型。例如,一个Eclipse项目,它构建了一个OSGi包,可能已经有一些Eclipse特定格式的先决条件元数据。这里我们不是要求所有Eclipse插件和组件去维护pom.xml文件,而是构建系统来组合一个虚拟的POM,它包含了Eclipse特定组件描述符的信息。

就像Eclipse允许非Eclipse组件提供classpath容器一样,Maven也在演变以允许非Maven组件提供项目元数据和依赖信息。这两者,其API的变化都需要插件开发者去考虑一个更通用的方式来和Eclipse及Maven交互。如果你在Maven 3中编写一个Maven插件,你就不再能够假定项目信息存储在pom.xml中,如果你正编写一个Eclipse插件,你也许就不能够假设classpath信息会完全的由Eclipse提供。集成工作让两者都更灵活,更通用。

一个存在潜在方式冲突的方面是项目创建过程。使用Maven,用户可以访问一个长长的Maven 骨架列表,从用Wicket编写的web应用项目,到如Mule的消息产品的消息组件。在Eclipse中,你创建一个JET模板或者一个自定义的向导来让用户一步步创建一个新的项目类型。在这些情况下,两个社区使用的不同方式会有健康的竞争,而且社区将不得不解决出现的问题。总之,更多的集成和协作长期来说对开发者就意味着更多的选择。


社区的交汇

随着Maven和Eclipse基金会周围的社区开始交互,还不清楚是否会有势力范围冲突或者共同目标协同和优势互补。为了交流印象,我们说Maven社区倾向于IDE无关,认为可工作的代码比优雅的设计更重要,团队共识比个人领导更重要。而Eclipse社区是另外一种感觉,他们编写分层的模式的代码,通常较团队共识更看重个人领导,并严格遵循一组关于软件如何设计和实现的观念。集成这两个社区一开始可能会有一些问题,但是,最终,我预测该工作会得以成功,因为有一些有趣的趋势驱动两者相互接纳:持续增长的模块化特性,更敏捷的渴望,以及企业中采用开源最佳实践的活动。

软件变得更加模块化,而且今天的企业应用依赖于很多第三方类库十分常见。越来越多的项目正依赖于越来越多的开源组件及类库,其驱动因素之一就是大家接受了开源能让组织减轻负担的同时控制自身目标这一想法。转向更小,更分布,更模块化的团队也推动了这一转变。开发这不会在一个项目上工作很多年,而是在敏捷工作环境中挑选项目,进行二周迭代,然后转向其它模块和组件。

在这敏捷的,开源的,模块化的环境中,Maven为那些想要快速从一个项目转向另外一个项目的开发者提供了一个至关重要的方式。使用m2eclipse,某个开发者可以花几分钟,使用Mylyn和WTP配置,仅从一个Subversion URL或者一个Maven POM具体化一个项目到他的工作空间中。我频繁的和一些公司说,让他们使用开源软件开发环境中用的工具和系统来统一内部的开发基础设施。这些组织看到开源项目的开发者十分高效的协作,他们想知道为了将这种高效的生产率带入企业开发中,需要什么样的工具和结构。他们寻找一个通用的开发平台,该平台提供了经过测试的协作模式,并能劝阻各部门不再持续的去重新发明轮子。

 

Eclipse和Maven是优秀的平台,这两个平台紧密的集成会方便企业中持续的采用开源工具。随着越来越多企业开始依赖于Maven进行企业构建,依赖Eclipse作为开发平台,越来越多的人会希望m2e项目将这次集成推向新的层次。

14
0
分享到:
评论
7 楼 回归蔚蓝 2012-04-05  
原文挂了, 是(http://jasonvanzyl.sys-con.com/node/817402/mobile)这篇吗?
6 楼 wenjinglian 2009-09-10  
 
5 楼 juvenshun 2009-02-06  
quiii 写道

O_O 那东西能用了么 不是还在孵化中么

当然能用了, 请看本文的下一部分
4 楼 quiii 2009-02-06  
O_O 那东西能用了么 不是还在孵化中么
3 楼 whaosoft 2009-02-05  
Maven 呵呵 没有过 不过看你说的以后我就很想很想了
2 楼 flyfan 2009-02-04  
个人很想用maven,但公司没人用
1 楼 lovefly_zero 2009-02-04  
刚过完年就写东西 辛苦了

相关推荐

Global site tag (gtag.js) - Google Analytics