21

我已经使用Maven几个月了,我对它在概念上和实践中的工作方式非常满意。

我还非常广泛地研究了Buckminster(但还没有运行样本),试图弄清楚它是什么以及它是如何比较的。文档很差。例如,他们使用 Build Automate 和 Deploy 之类的术语,但我还没有看到任何关于部署的内容。分阶段迁移是另一个暗示但未讨论的话题。

Maven 和 Buckminster 都使您能够指定依赖关系并通常管理构建、测试和可能的部署过程。

它们都具有 Eclipse 集成,并且都应该(仅使用 Maven)简化基于 Eclipse 的项目及其依赖项的设置和共享。

我可以看到的主要区别是:

  • 依赖项:

    • Buckminster 可以指定存在于源存储库中的依赖项和它自己的存储库类型,此外还能够引用 Maven 存储库以获取依赖项。
    • Buckminster 可以将依赖项分组到虚拟发行版中,并且还具有平台意识。在 Maven 中,使用引用其他依赖项并将它们分组的 pom 对软件进行分组当然是可能的。
  • 建造

    • Maven 使用基于布局的隐式构建系统。很容易创建一个默认项目,把东西放在他们期望的地方,并让 maven 构建、测试和创建 jars。同时,含蓄也可能是一种束缚。你必须接受 Maven 做事的方式。
    • Buckminster - 我不清楚 Buckminster 如何决定构建什么以及如何构建它。看起来这将与 eclipse 过程保持一致。Buckminster 也允许使用 ant,但不清楚这是否是必需的。至少,生命周期的好坏定义较少(un?),允许更大的灵活性。
    • 这两种工具都允许无头构建,尽管 buckminster 可能会带来更多的包袱。
  • 插件

    • Maven 为生命周期的所有阶段提供了一套非常广泛的插件,用于许多不同类型的自动化,从代码生成到运行嵌入式服务进行测试。
    • Buckminster 似乎没有相同的插件概念。有读者和演员,但他们似乎扮演的角色并不相同。Buckminster 应该可以访问大量可用于 ant 的插件集。目前尚不清楚 ant 操作如何与 Buckminster 的其余进程无缝集成(这也是 maven ant 插件的一个问题)。
  • 部署

    • Maven 有许多插件用于生成软件分发(程序集)和移动它们(货车)。Buckminster 是否从 Ant 获得所有这些?
  • 复杂

    • Buckminster 的不同模式可能非常复杂,在 CPEC、RMAP、MSPEC 等之间。
    • Maven 在配置方面稍微简单一些,尽管它可能会因大型和多模块项目而变得复杂。Maven 还具有用于轻松创建新项目的原型。
  • 文档

    • 他们都是坏人。;-)
    • Buckminster 在文档方面非常肤浅。没有足够的例子可用。
    • Maven 插件的文档往往很差,因此很难让它们正确运行。

从我的角度来看,我想用 Buckminster 做的大部分事情都可以用 Maven 做。来自版本控制的“物化”是一个加分项,但组织内的开发人员可以将 maven 快照发布到存储库以相互共享,而不仅仅是提供固定版本。

似乎从 Maven 生命周期的限制中获得了更多的灵活性和自由度(曾经想添加另一个阶段,例如用于清理的后测试?必须等待他们在核心中完成它)。

我错过了什么?Buckminster 中是否有一些重要的功能值得增加复杂性?

上面是否有任何非常不准确的陈述(假设我不是 Buckminster 用户,只是一个中低级 Maven 用户)?

4

7 回答 7

10

一些澄清。

  • 依赖项

    Buckminster 没有自己的存储库类型。它有一个发现机制,可以将现有的元数据(例如 Maven POM)转换为 Buckminster 可以理解的模型。如果无法以任何其他方式派生此元数据,则可以将其作为 XML 文件逐字添加。

  • 建造

    Buckminster 以与 Eclipse IDE 相同的方式决定构建什么。除此之外,它还从清单、build.properties、plugin.xml 等已知工件中提取信息,并将其转换为模型中的操作,这些操作可以使用 Buckminster perform 命令显式触发。

    我完全不相信 Buckminster 会为无头构建带来更多包袱。事实上,我认为相反的情况更常见。在空机器上使用 Maven 进行构建通常从下载大量组件开始,即使手头的任务是微不足道的。

  • 插件

    Buckminster 基于 OSGi 并使用 Eclipse 扩展点进行扩展。可以使用此机制添加新类型的存储库、新类型的操作、新发现机制等。

  • 复杂

    最小的 Buckminster 配置只需要一个 CQUERY 和一个 RMAP。使用它们,可以构建一个使用 pack200 签名和处理的任意大小的完整 p2 更新站点。无需将文件添加到任何功能和捆绑包中。没有什么需要“巴克敏斯特化”。所以我不确定我是否同意 Maven 更易于配置。

除了 Roland 和 Zoltán 已经提到的好处之外,我想补充一点,由于 buckminster 构建是真正的工作空间构建,它将利用 .project 文件中声明的所有构建器。这里有些例子:

  • PDE Manifest builder - 从清单、属性文件等生成警告和错误。
  • PDE Schema builder(扩展点模式相同)
  • 为 Eclipse Build 结构制作的所有其他构建器。这包括 XML 模式验证构建器、Java 脚本构建器以及许多其他构建器。
我确信 Maven 与他们中的大多数人都有对应关系。Buckminster 的要点是您不需要维护额外的构建系统。在 IDE 工作区中工作的东西,也可以无头工作。

于 2010-04-28T15:41:10.140 回答
7

Maven 使用基于布局的隐式构建系统。很容易创建一个默认项目,把东西放在他们期望的地方,并让 maven 构建、测试和创建 jars。同时,含蓄也可能是一种束缚。你必须接受 Maven 做事的方式。

实际上,您可以明确指定在 Maven 中放置内容的位置。默认位置就是这样,默认值,易于覆盖,尽管很少有充分的理由。

Buckminster - 我不清楚 Buckminster 如何决定构建什么以及如何构建它。看起来这将与 eclipse 过程保持一致。Buckminster 也允许使用 ant,但不清楚这是否是必需的。至少,生命周期的好坏定义较少(un?),允许更大的灵活性。

我认为 Maven 倾向于遵循容易被覆盖的合理默认值的哲学。

Maven 在配置方面稍微简单一些,尽管它可能会因大型和多模块项目而变得复杂。Maven 还具有用于轻松创建新项目的原型。

Maven 的真正优势在于它对依赖项的管理,这在具有多个子项目的复杂项目中往往表现得特别好。定义子项目的层次结构并让它正常工作非常容易。

文档:它们都很糟糕。;-)

不能不同意这一点!

于 2009-02-24T01:00:31.890 回答
7

Buckminster 下载页面提供了 PDF 格式的 Buckminster Book - 超过 250 页的文档,包括介绍和详细的参考文档。

从这里下载:http: //www.eclipse.org/downloads/download.php?file= /tools/buckminster/doc/BuckyBook.pdf

于 2010-04-28T14:03:05.210 回答
5

使用 Buckminster 的最大优势是在编译 OSGi 包或 Eclipse 插件时,因为它可以重用 PDE 构建基础架构,该基础架构可以处理 manifest.mf/plugin.xml 文件中已经存在的各种版本信息。使用 Maven 时,必须复制此信息(AFAIK)。如果您不开发 Eclipse 插件,并且已经熟悉 Maven,那么 Buckminster 将不会提供任何真正的优势,尤其是考虑到陡峭的学习曲线。另一方面,对于构建 Eclipse 插件,它提供了更好的 ot-of-the-box 支持。

您可以通过编写新的阅读器(从其他位置获取源代码)或新的参与者(提供构建步骤 - 这些参与者可以重用 Maven 或 Ant,从而提供额外的功能)来扩展 Buckminster。

于 2010-03-09T15:31:24.100 回答
3

我想知道为什么没有人提到第谷。Tycho 已被提议为Eclipse 项目,现在处于孵化阶段

我试图与巴克敏斯特相处,但现在我将看看第谷。这有以下原因:

  • 如前所述,buckminster 的文档非常糟糕。
  • 实际上,我从未运行过 buckminster 示例之一。
  • 我知道 Maven,而且文档恕我直言,比 buckminster 的要好。
  • 我想使用构建服务器(Jenkins),Maven的集成非常好。

我目前没有使用第谷的经验,但它似乎很有希望。

于 2011-07-12T12:27:45.283 回答
2

简而言之,我对 Buckminster 的(极其有限的)理解是,它是一个用于在团队成员之间为一组项目进行版本控制和共享 Eclipse 项目配置的系统。它似乎与 Maven 重叠,因为它管理依赖项,但我认为这些是 Eclipse 项目级别的依赖项,而不是 java 依赖项。

我个人不想将我的构建过程绑定到 Eclipse 或任何其他 IDE。无需 IDE 或其他 GUI 工具即可从命令行工具执行完整构建有很多好处。

免费的 O'Reilly 书籍Maven: The Definitive Guide写得非常好,真正填补了 Maven 文档的空白。

于 2009-02-26T04:41:12.780 回答
0

由于缺少 buckminster 文档,我使用 Buckminster/Hudson创建了一个建筑产品示例。这可能有助于开始,也适用于Jenkins

我使用Ralf 的教程来很好地了解该主题。

目标平台

如何设置 Hudson 和 Buckminster 可以在 Ralf 的教程中阅读。小提示,为防止 OutOfMemoryErrors,将 -Xmx1024m 添加到 Buckminster 安装的“附加参数”中(请参阅 故障排除提示 Hudson out of memory)。

我有一个单独的自由式工作来发布我的目标平台以用于其他工作。在“源代码管理”部分,我检查了包含我的目标定义的功能(在我的例子中是 ch.scodi.client.site)。
为了真正解决目标定义,我使用以下命令添加了一个构建步骤“Run Buckminster”:

importtargetdefinition -A '${WORKSPACE}ch.scodi.client.site/TargetDefinition.target'

Post-Build-Action 中选中“归档并发布 Eclipse 目标平台”并添加 .metadata/.plugins/org.eclipse.pde.core/.bundle_pool为路径。

考虑到 TargetDefinition 无法解析目录位置。我的目标定义曾经有一个目录位置,其中包含来自 springsource 存储库的包。
我尝试在实现过程中使用 rmap 文件来获取捆绑包,但遇到了一些麻烦,因此我决定为这些捆绑包创建一个自己的更新站点并将该站点添加到目标定义中。更多信息可以在这里找到:http:
//www.eclipse.org/forums/index.php?t=msg &th=164508&start=0&

构建产品

目标定义作业运行后,我们就可以开始构建产品了。
这很简单,请参阅 Ralf 的教程,了解如何从 SVN 签出您的源代码。
我为每个服务器和客户端产品提供了三种不同的构建:集成、夜间和发布。
对于每个构建,插件限定符应该不同(例如 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

于 2016-09-02T11:37:50.817 回答