我已经使用Maven几个月了,我对它在概念上和实践中如何运作非常满意.
我也非常广泛地研究了Buckminster(但尚未开始运行样品),试图弄清楚它是什么以及它是如何比较的.文档很差.例如,他们使用Build Automate和Deploy等术语,但我还没有看到有关部署的任何信息.分阶段迁移是另一个暗示但尚未讨论的主题.
Maven和Buckminster都可以指定依赖关系,并且通常可以管理构建,测试和可能的部署过程.
它们都具有eclipse集成,并且两者都应该(仅使用Maven)使基于eclipse的项目及其依赖项的设置和共享变得微不足道.
我能看到的主要区别是:
依赖关系:
除了能够引用Maven存储库以获取依赖关系之外,Buckminster还可以指定存储在源存储库中的依赖关系以及它自己的存储库类型.
Buckminster可以将依赖关系分组到虚拟发行版中,并且还可以识别平台.在Maven中,软件分组似乎是可能的,其中poms引用其他依赖并将它们分组.
建立
Maven使用基于布局的隐式构建系统.创建一个默认项目非常容易,把它放在预期的位置,并有maven构建,测试和创建jar.同时,隐含也可以是收缩.你必须忍受Maven如何做事.
Buckminster - 我不清楚Buckminster如何决定构建什么以及如何构建它.似乎这会与日食过程一致.巴克敏斯特也允许使用蚂蚁,但目前尚不清楚这是否是一项要求.至少,生命周期较少(不?)定义为好或坏,允许更多的灵活性.
这两种工具都允许无头构建,尽管巴克敏斯特可能携带更多的行李.
插件
Maven为生命周期的所有阶段提供了非常广泛的插件集,适用于许多不同类型的自动化,从代码生成到运行嵌入式服务进行测试.
Buckminster似乎没有相同的插件概念.有读者和演员,但他们似乎没有扮演同样的角色.Buckminster应该可以访问可用于ant的大量插件.目前尚不清楚ant动作能够与其他Buckminster进程无缝集成(这也是maven ant插件的一个问题).
部署
Maven有许多插件用于生成软件(程序集)的分发并移动它们(货车).Buckminster是否从Ant获得了所有这些?
复杂
Buckminster的不同模式在CPECs RMAPs MSPEC等之间可能相当复杂.
虽然Maven在大型和多模块项目中变得复杂,但它在配置方面稍微简单一些.Maven还有Archetypes,可以轻松创建新项目.
文档
他们都很糟糕.;-)
Buckminster非常浅,文档化.没有足够的例子可供使用.
Maven插件往往文档很差,很难让它们正常运行.
从我的角度来看,我想用Buckminster做的大部分事情都可以和Maven一起使用.从版本控制"实现"是一个优点,但组织中的开发人员可以将maven快照发布到存储库以便彼此共享,此外还提供固定版本.
似乎有更多的灵活性和自由来避免Maven生命周期的限制(曾经想要添加另一个阶段,比如后期测试清理?必须等待它们在核心中进行).
我错过了什么?Buckminster中是否有一些重要的功能值得提升复杂性?
上面是否有任何疯狂的真实陈述(鉴于我不是Buckminster用户而只有中低级别的Maven用户)?
一些澄清.
依赖
Buckminster没有自己的存储库类型.它有一个发现机制,可以将现有的元数据(如Maven POM)转换为Buckminster可以理解的模型.如果无法以任何其他方式派生,则可以将此元数据逐字添加为XML文件.
建立
Buckminster以与Eclipse IDE相同的方式决定构建内容.除此之外,它还从已知工件中提取信息,例如manifest,build.properties,plugin.xml等,并将其转换为模型中可以使用Buckminster perform命令显式触发的操作.
我完全不相信巴克明斯特为无头建筑带来了更多的包袱.事实上,我认为相反的情况更为常见.在空机器上使用Maven构建通常从下载大量组件开始,即使手头的任务很简单.
插件
Buckminster基于OSGi并使用Eclipse扩展点进行扩展.可以使用此机制添加新类型的存储库,新类型的操作,新的发现机制等.
复杂
最低Buckminster配置只需要一个CQUERY和一个RMAP.有了它们,就可以构建一个任意大小的完整p2更新站点,该站点使用pack200进行签名和处理.不需要将任何文件添加到任何功能和包中.没有什么需要"Buckminsterized".所以我不确定我是否同意Maven配置更简单.
除了Roland和Zoltán已经提到的好处之外,我想补充一点,因为buckminster构建是一个真正的工作区构建,它将利用在.project文件中声明的所有构建器.这里有些例子:
PDE清单构建器 - 从清单,属性文件等生成警告和错误.
PDE模式构建器(扩展点模式的相同内容)
为Eclipse Build结构制作的所有其他构建器.这包括XML模式验证构建器,Java Script构建器以及许多其他构建器.
我确信Maven对大多数人都有通信.Buckminster的观点是您不需要维护额外的构建系统.在IDE工作区中有效的方法也可以无头工作.
Maven使用基于布局的隐式构建系统.创建一个默认项目非常容易,把它放在预期的位置,并有maven构建,测试和创建jar.同时,隐含也可以是收缩.你必须忍受Maven如何做事.
实际上,您可以明确指定在Maven中放置内容的位置.默认位置只是默认位置,易于覆盖,尽管很少有理由.
Buckminster - 我不清楚Buckminster如何决定构建什么以及如何构建它.似乎这会与日食过程一致.巴克敏斯特也允许使用蚂蚁,但目前尚不清楚这是否是一项要求.至少,生命周期较少(不?)定义为好或坏,允许更多的灵活性.
我认为Maven倾向于遵循容易过度的合理默认理念.
虽然Maven在大型和多模块项目中变得复杂,但它在配置方面稍微简单一些.Maven还有Archetypes,可以轻松创建新项目.
Maven的真正优势在于对依赖关系的管理,这在具有多个子项目的复杂项目中尤为明显.定义子项目的层次结构并使其正常工作非常容易.
文档:它们都很糟糕.;-)
不能不同意!
Buckminster下载页面提供了一个PDF格式的Buckminster书籍 - 超过250页的文档,包括介绍和详细的参考文档.
从这里下载:http://www.eclipse.org/downloads/download.php?file = / tools/badminster / doc/BuckyBook.pdf
使用Buckminster的最大优点是编译OSGi包或Eclipse插件时,因为它可以重用PDE构建基础结构,该基础结构处理manifest.mf/plugin.xml文件中已存在的各种版本信息.使用Maven时,必须复制此信息(AFAIK).如果您不开发Eclipse插件,并且已经熟悉Maven,那么Buckminster将没有真正的优势,特别是考虑到陡峭的学习曲线.另一方面,为了构建Eclipse插件,它提供了更好的开箱即用支持.
您可以通过编写新的读取器(从其他位置获取源)或新的actor(提供构建步骤 - 这些actor可以重用Maven或Ant,从而提供额外的功能)来扩展Buckminster.