我已经使用Maven几个月了,我对它的运作方式非常满意 在概念上和实践中。
我也非常广泛地看了Buckminster(但尚未运行样本)试图找出它是什么 以及它如何比较。文档很差。例如,他们使用Build Automate和Deploy等术语,但我还没有看到有关部署的任何信息。分阶段迁移是另一个暗示但尚未讨论的主题。
Maven和Buckminster都能让您指定依赖关系,并且通常可以管理构建,测试和可能的部署过程。
他们都有eclipse集成,并且两者都应该(仅使用Maven)使基于eclipse的项目及其依赖项的设置和共享变得无足轻重。
我能看到的主要区别是:
依赖关系:
构建
插件
部署
复杂性
文档
从我的角度来看,我想用Buckminster做的大部分事情都可以和Maven一起使用。从版本控制“物化”是一个优点,但组织中的开发人员可以将maven快照发布到存储库以便彼此共享,此外还提供固定版本。
似乎有更多的灵活性和自由度来避免Maven生命周期的限制(曾经想要添加另一个阶段,比如后期测试以进行清理?必须等待他们在核心中执行此操作。)
我错过了什么? Buckminster中是否有一些重要的功能值得提高复杂性?
上面是否有任何非常真实的声明(鉴于我不是Buckminster用户,只有中低级别的Maven用户)?
答案 0 :(得分:10)
一些澄清。
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文件中声明的所有构建器。以下是一些示例:
答案 1 :(得分:7)
Maven使用隐式构建系统 基于布局。这很容易 创建一个默认项目,放东西 他们应该在哪里 maven构建,测试和创建jar。在 同时,隐含也可以 收缩。你必须忍受 Maven如何做事。
实际上,您可以明确指定在Maven中放置内容的位置。默认位置只是默认值,易于覆盖,但很少有充分的理由。
巴克敏斯特 - 我不清楚 巴克敏斯特如何决定建造什么 以及如何建立它。这似乎 这将与日食一致 做同样的过程。 巴克敏斯特也允许使用 蚂蚁,但目前尚不清楚这是否是一个 需求。至少, 生命周期较少(不?)定义为 好与坏,允许更多 灵活性。
我认为Maven倾向于遵循容易过度的合理违约理念。
Maven有点简单 配置方面,虽然它可以 复杂的大和 多模块项目。 Maven也有 Archetypes轻松创建新的 项目
Maven的真正优势在于对依赖关系的管理,这在具有多个子项目的复杂项目中尤为明显。定义子项目的层次结构并使其正常工作非常容易。
文档:它们都很糟糕。 ; - )
不能不同意!
答案 2 :(得分:7)
Buckminster下载页面提供了一个PDF格式的Buckminster书籍 - 超过250页的文档,包括介绍和详细的参考文档。
从这里下载:http://www.eclipse.org/downloads/download.php?file=/tools/buckminster/doc/BuckyBook.pdf
答案 3 :(得分:5)
使用Buckminster的最大优势是编译OSGi包或Eclipse插件时,因为它可以重用PDE构建基础结构,该基础结构处理manifest.mf / plugin.xml文件中已存在的各种版本信息。使用Maven时,必须复制此信息(AFAIK)。如果您不开发Eclipse插件,并且已经熟悉Maven,那么Buckminster将没有真正的优势,特别是考虑到陡峭的学习曲线。另一方面,为了构建Eclipse插件,它提供了更好的开箱即用支持。
您可以通过编写新的读者(从其他位置获取源代码)或新的actor(提供构建步骤 - 这些actor可以重用Maven或Ant,从而提供额外的功能)来扩展Buckminster。
答案 4 :(得分:3)
我想知道为什么没有人提到Tycho。 Tycho被提议为Eclipse Project,现在是Incubating Phase。
我试图与巴克明斯特相处,但我现在看看第谷。这有以下原因:
目前我对Tycho没有任何经验,但似乎很有希望。
答案 5 :(得分:2)
我对Buckminster的理解(极其有限)简单来说,它是一个系统,用于在团队成员之间为一组项目进行版本控制和共享Eclipse项目配置。它似乎与Maven重叠,因为它管理依赖项,但我认为这些是Eclipse项目级依赖项,而不是Java依赖项。
我个人不想将构建过程绑定到Eclipse或任何其他IDE。无需IDE或其他GUI工具即可从命令行工具执行完整构建,这有很多好处。
免费的O'Reilly书籍Maven: The Definitive Guide编写得非常出色,真正填补了Maven文档的空白。
答案 6 :(得分:0)
由于缺少buckminster文档,我创建了一个使用Buckminster / Hudson构建产品的示例。这可能有助于入门,也适用于 Jenkins 。
我使用Ralf's tutorial来详细了解该主题。
目标平台
如何设置Hudson和Buckminster可以在Ralf的教程中阅读。 小提示,为防止OutOfMemoryErrors,添加-Xmx1024m "其他参数"您的Buckminster安装(请参阅 troubleshooting tip Hudson out of memory)。
我有一个单独的自由风格作业来发布我的目标平台 其他工作。在"源代码管理"第一节结帐 功能包含我的目标定义(在我的情况下 ch.scodi.client.site)。
为了实际解决目标定义,我 添加了构建步骤"运行Buckminster"使用以下命令:
importtargetdefinition -A '${WORKSPACE}ch.scodi.client.site/TargetDefinition.target'
在构建后操作已选中"存档并发布Eclipse 目标平台"并补充说
.metadata/.plugins/org.eclipse.pde.core/.bundle_pool
作为路径。考虑TargetDefinition无法解析目录 位置。我的目标定义曾经有一个目录位置 包含来自泉源库的包。
我尝试使用 rmap文件在实现过程中获取bundle但有一些 麻烦,所以我决定为那些创建一个自己的更新站点 捆绑并将此站点添加到目标定义。更多关于那可以 在这里找到:
http://www.eclipse.org/forums/index.php?t=msg&th=164508&start=0&构建产品
运行目标定义作业后,我们可以开始构建 产品。
这很简单,请参阅Ralf关于如何使用的教程 从SVN检查你的来源。
我有三个不同的版本 每个,服务器和客户端产品:集成,每晚和发布。
For 每个构建插件限定符应该是不同的(例如 I20100326-2,N20100326,R20100326-01)。为此,我安装了 流动的插件:
http://wiki.hudson-ci.org/display/HUDSON/Version+Number+Plugin
我选择的集成工作"创建格式化的版本号"说出来 "版本"并使用类似I${BUILD_YEAR, XXXX}${BUILD_MONTH, XX}${BUILD_DAY, XX}-${BUILDS_TODAY}
之类的格式。为了最终构建客户端产品,我添加了Buckminster构建步骤, 选择了以前发布的目标平台并使用了 以下命令:
import '${WORKSPACE}source/scodi-rcp/features/ch.scodi.client.site/site.cquery'
build
perform -D target.os=* -D target.ws=* -D target.arch=* -D
qualifier.replacement.*=${version} ch.scodi.client.site#site.p2.zip
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86
ch.scodi.client.site#create.product.zip perform -D target.os=win32 -D
target.ws=win32 -D target.arch=x86_64
ch.scodi.client.site#create.product.zip
注意
qualifier.replacement.*=${version}
,这告诉我们 Buckminster / Eclipse使用我的格式化版本作为限定符和 导致插件名称如下com.softmodeler.model_1.0.0.I20100325-3.jar
,要求Bundle-Version: 1.0.0.qualifier
中定义了manifest
。
http://flaviodonze.blogspot.ch/2010/03/building-products-with.html