【问题标题】:Best practices for command-line builds命令行构建的最佳实践
【发布时间】:2011-03-12 03:22:15
【问题描述】:

Joel Test 的第 2 项是“您可以一步构建构建”,但实现此目标的最佳(或普遍接受的)方法是什么?与维护完全独立于 IDE 的构建脚本(例如,在 Java 项目的情况下使用 Ant 或 Maven)相比,使用 IDE 的命令行界面执行headless build 的优缺点是什么。

我问这个问题是因为我正在试验 Maven,并且有点惊讶地发现,即使使用 m2eclipse 插件,关闭 Eclipse 的 Java Builder 并将整个构建过程委托给 Maven 也是不可行的。项目。看来如果我想将项目迁移到 Maven,我最终将不得不维护两个等效但不同的构建过程,例如命令行构建将使用 DataNucleus Maven 插件来增强 JDO 类,而 IDE 构建将使用 Eclipse 的 DataNuclues 插件;命令行构建将使用 Tomcat Maven 插件,而 IDE 将使用 Eclipse 的 Web 工具平台。这种冗余似乎很不幸。

我了解到 NetBeans 使用 Ant 进行构建,听起来它可以解决这个问题。但不幸的是,我既没有使用 NetBeans 也没有使用 Ant!

编辑添加:我发现我可以在 Eclipse 中设置一个 Maven 构建器,它具有调用我正在使用的一些 Maven 插件的特定目标(例如,在我的例子中,目标是“datanucleus :enhance process-resources" 负责 JDO 增强、资源复制和 native2ascii 转换)。这将 java 编译留给 Eclipse,但仍实现了与 Maven 的某种程度的集成。

【问题讨论】:

  • 通过非常仔细地定义“步骤”...

标签: eclipse maven-2 command-line build


【解决方案1】:

eclipse builder 为您提供了中间和重复的构建,但“Joel 测试”实际上是关于能够在一个步骤中从源代码到准备部署的东西。如果您使用的是 Maven,有几种方法可以解决 - 包括从 Eclipse 中将 Maven 作为命令行脚本调用。

mvn package

这是我最常用于快速运行整个构建设置的工具。如果需要,您可以通过 POM 扩展 Maven 并注入一些额外的机制。如果您变得更复杂一点,开始使用多模块 POM 和 maven 设置来集成功能测试并与其余代码一起运行通常是最有效的。

基本上,让 eclipse 与它的构建器“做它的事”并利用它提供的功能,但是当您准备好使用最终产品时,通过持续集成服务器从命令行调用它(Hudson 是很容易获得和设置 - 也是免费的:http://hudson-ci.org/)。大概如果您正在考虑使用 Maven,您还将设置一个 Archiva 或 Nexus 实例作为生成库的 DSL。您可以让 hudson 调用“mvn deploy”来进行常规签入构建,或者“mvn release:prepare && mvn release:perform”来调用“mvn release:prepare && mvn release:perform”,以便在您准备好发布版本时调用(Hudson 中的单独构建最适合此)

【讨论】:

  • 好的,基本上这是两个不同的过程。我怀疑我可能不得不忍受这种情况,但我想先听听其他开发人员的意见。 (如果 Eclipse 开箱即用“做它的事”,这甚至都不是问题,但事实上我必须手动配置很多东西,比如 JDO 增强、native2ascii 转换和 WAR 部署,有效地复制POM 中已经声明的内容,让我开始思考)。
  • 我变得更聪明了,发现我至少可以将部分工作委派给 Maven(参见上面的编辑)。
【解决方案2】:

您可以在 IDE 中进行无头构建。在 Eclipse 中,您可以将任意 shell 命令作为“外部工具”执行。在 IDEA 和 netbeans 中也是如此,只需稍加努力即可。至少,这是对构建配置进行更改时应该运行的无头构建的便捷测试。

另外,我想补充一点,构建应该是一步作为最低要求。它还应该易于设置和调试。如果设置一个新的开发人员环境需要超过几个小时,那么一步式过程可能不是最佳的。需要注意的是,如果您每季度或每年添加或更换团队成员,这不是什么大问题。

【讨论】:

  • 我认为 OP 在这里的意思是运行 Eclipse Build headless(从命令行),而不是其他方式。而且因为他可以做到这一点,为什么需要一个带有并行维护等(短版)的 Maven 构建?
猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 2018-10-07
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2018-12-21
相关资源
最近更新 更多