命令行构建的最佳实践

3

Joel Test中的第二项是“是否可以一步构建”,但是实现这个的最佳(或常见)方式是什么?使用IDE的命令行界面进行无头构建与维护完全独立于IDE的构建脚本有何优缺点(例如,在Java项目的情况下使用Ant或Maven)。

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

我了解到NetBeans使用Ant进行构建,这听起来似乎可以解决这个问题。但不幸的是,我既不使用NetBeans也不使用Ant!
编辑后添加:我发现我可以在Eclipse中设置一个Maven builder,使用特定的目标调用我正在使用的一些Maven插件(例如,在我的情况下,“datanucleus:enhance process-resources”目标负责处理JDO增强、资源复制和native2ascii转换)。这将Java编译留给Eclipse,但仍然实现了与Maven的某种程度的集成。

非常仔细地定义“步骤”... - Thorbjørn Ravn Andersen
2个回答

1
Eclipse构建器可以给您提供中间和重复构建,但“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”(对于此,Hudson中的单独构建效果最佳)


好的,基本上这是两个不同的进程。我怀疑我可能不得不接受这一点,但我想先听听其他开发人员的意见。(如果Eclipse可以直接“做它的事情”,那就不是问题了,但事实上我必须手动配置很多东西,如JDO增强、native2ascii转换和WAR部署,这实际上是在重复已经在POM中声明的内容,这让我想了起来)。 - Todd Owen
我变得更聪明了,发现我至少可以将一些工作委托给Maven(请参见上面的编辑)。 - Todd Owen

0

你可以在IDE中进行无头构建。在Eclipse中,你可以执行任意的shell命令作为“外部工具”。在IDEA和NetBeans中也是如此,只需要稍加努力即可。至少,在构建配置发生更改时,这是一个方便的无头构建测试。

另外,我想补充一点,构建应该是最基本的一步。它应该易于设置和调试。如果设置新开发者环境需要超过几个小时,那么一步流程可能不够优化。但是请注意,如果每季度或每年添加或更换团队成员,则这个问题就不那么重要了。


我认为OP的意思是在命令行中运行Eclipse Build headless,而不是反过来。因为他可以这样做,所以为什么需要使用Maven构建并进行并行维护等操作(简短版)? - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接