你在复杂的构建过程中使用了什么?

时间:2009-02-06 16:57:18

标签: java ant build-process

我正在尝试修改我们的构建过程,这是一个巨大的Ant build.xml,它调用其他ant构建文件并执行几个Java类来执行更复杂的逻辑,这些逻辑在Ant中是不可能的/可怕的。 / p>

背景:

  • Java和Ant的经验,一些Groovy
  • Windows平台

目标:

  • 作为命令行cron和servlet发布到
  • 的组合运行
  • 尽可能简化,最少的语言和技术之间的反弹

我需要像Java这样的语言提供的更高级别的逻辑能力,而Ant非常简单,我们使用过滤来覆盖不同客户端的默认属性文件。大多数情况下,我想知道人们使用的是Ant / Java以外的东西。

15 个答案:

答案 0 :(得分:8)

除了你提到的Ant和疤痕制造/自动工具外,主流工具是:

我使用SCons,因为它基于python,资金充足且优雅。 Jam似乎是最实用的。 我不太了解CMake。 Maven可能是您的选择,因为它以Java为中心,比Ant更高级。

您可以在维基百科找到更多内容:List of built tools

答案 1 :(得分:7)

如果你追求Maven,那么你将遇到两个问题:复杂的构建和学习Maven的f @ * #ing“魔法”。 Maven只会使问题变得更糟,因为它是钝的,过于复杂。

我在一家大型财富500强公司继承了传统的Maven 1.x版本。近年来,我在许多其他项目中选择使用Maven 2.x.我对Maestro进行了评估,希望它可以让Maven易于处理。我的结论,就像许多其他人一样(检查'网),Maven是朝错误方向迈出的一大步。它肯定不是对Ant的改进。

我已经使用Ant多年了,包括编写一个大型的Ant帮助脚本开源库。我也广泛使用它的.NET堂兄nAnt。但是,Ant有两个主要的缺点。其一,XML根本不是做构建任务的正确位置。二,Ant和XML不能很好地扩展到大型复杂的构建。事实上,我在这里写了很多关于我在那个舞台上的经历(和Maven)。

行业领导者已经得出结论,构建只是另一个应用程序,应该使用通用应用程序工具来解决。但是,由于它涉及系统级和跨平台功能,因此大多数开发语言/平台都不适合(包括Java,因此包括Ant和Maven)。这也排除了.NET。

我花了两年时间寻找替代品,我发现了它:Python。它具有系统级访问,跨平台可移植性,简单性,可读性,功能,健壮性和成熟度的正确组合。 SCons,buildbot,setuptools / easyinstall和基础Python是我目前构建过程的目标平台。必要时,与Ant,Maven和任何其他此类工具的集成很容易。同时,我可以将这些工具用于任何具有任何源语言的平台上的任何构建的核心。没有更多的障碍,没有更多疯狂的复杂性,没有更多据称有用的“声明性”脚本,没有更多的黑盒f @ * #ing“魔术”。

如果你不能切换到Python,那么试试Ant + Ivy(在apache.org)。它为您提供了Maven的酷存储库,而没有Maven的大部分邪恶。这也是我在做的,必要和适当的。

祝福。

答案 2 :(得分:4)

另外看看

虽然像SCons这样的通用构建系统非常强大,但与专为构建Java项目而量身定制的系统相比,Java支持有限。

答案 3 :(得分:3)

我喜欢使用Rake,因为您可以在需要时依靠整个Ruby语言及其框架库的强大功能。

答案 4 :(得分:3)

我使用Ant,利用其macro feature。如果以一致的方式布局项目,可以通过编写宏来消除大量重复。

我一直在构建一个Antlib包含我在多个项目中重复使用的宏和自定义任务。

或者,有些人发誓Maven。其他人只是对Maven发誓。

答案 5 :(得分:2)

我使用Maven,不只是用于构建,我还使用他们的release / dist插件。

在一对命令中,我可以拥有源代码控制中的代码来构建,打包和发布。

发布插件处理更新版本号,dist处理如何将所有内容放在一起并压缩它。

与Maven相比,Ant看起来很难看。当然,Maven有一个学习曲线,但是阅读pom.xml比阅读build.xml要容易得多。

Maven需要更加冗长。

答案 6 :(得分:1)

我喜欢Ant,但前提是你花时间编写自己的Java插件来封装复杂的动作。这并不难,但不幸的是,大多数人都试图在XML中使用ant-contrib来编写逻辑。我认为这是一个很大的错误。

我听说过关于rake和groovy工具的好东西(在另一条评论中提到),但我对它们没有经验。

如果您尝试在生命周期中编写几个步骤,那么最好使用基于流程自动化的构建服务器,如AnthillPro(Cruise,BuildForge和Electric-Commander是此领域的其他人)。

另一个提出这类问题的地方是CITCON mailing listCITCON是一个关于持续集成和测试的会议,相关的邮件列表已成为围绕这些主题的非常好的社区。

(我是CITCON的组织者,但是爱的工作不是利润的制造者。它确实有一个非常有用的邮件列表。如果我是为了钱而拉皮条,那将是The CI Guys。;-) )

答案 7 :(得分:1)

自从构建Java以来​​,坚持使用Ant。我已经为一些JNI工作混合了Ant / SCons,但总的来说我会留在Ant,特别是因为你在Ant中有一个现有的构建设置。移植到Maven就像在一个没有洞的墙上推一个方形钉。

为任何人提供自定义Java逻辑,并考虑编写适当的Ant任务,而不是执行外部Java代码。我通过简单地扩展Ant来完成我所需要的,解决了构建过程中一些非常复杂的部分,例如。管理大型gui项目的图标资源或直接注入subversion信息信息jar清单(谢谢SVNKit)

答案 8 :(得分:1)

我会在一周的任何一天和Ant一起去。

它并不完美; XML非常冗长,实现任何逻辑几乎都是不可能的,但即使是团队中最初级的工程师也至少可以理解ant文件在一天内所做的事情。

如果您愿意,可以使用java重构复杂逻辑并将其集成到ant中。 Ant为您提供java的所有功能:)

无论您使用何种系统,依赖性解析都很困难。使用ant,最好的解决方案似乎是存储所有jar的lib目录,或者是在构建时从中复制库的内部Web服务器。

我对Maven 1和Maven 2也有一些经验。这种经历让我觉得Maven对于业余爱好项目来说很棒,但是随着时间的推移,你可能会遇到软件的复杂问题。

我发现Maven存在两个重要问题:

  • 使用Maven导入的任何依赖项可能会在您不知情的情况下随时间发生变化,从而导致出现奇怪的问题。
  • 您不仅导入使用Maven直接导入的软件的许可证,还导入间接导入的库使用的许可证

简而言之,我不喜欢构建取决于它开始的时间。在生产发布一年后生成错误修复版本时,这可能是一个真正的问题。

当然可以管理这些问题(可能使用nexus代理),但在重建构建系统之前需要考虑它们。在我的公司,我们决定将Ant用于所有新项目,并尝试在场合出现时将maven 1和2移植到ant。让它保持工作真的太难了。

我的建议是,如果您和您的团队知道如何处理ant,请尝试重构您的ant文件,不要跳过其他构建工具。只需要太多时间就可以做到;你可以花钱赚钱并在公司中生存的时间:)

答案 9 :(得分:0)

我们使用luntbuild。这是一个非常容易使用的网络应用程序。它将从CVS / SVN签出,自动增加版本/内部版本号,在ant脚本中执行构建任务,并使用新版本标记您的存储库。可以安排自动构建,让它通过电子邮件发送给您或通过IM与您联系,还具有安全性和构建依赖性。

我们仍在使用版本1.2.3,但我发现它高达1.6.0。它只是有效。

http://luntbuild.javaforge.com/

编辑:重新阅读你的问题我现在看到你正在寻找替代Ant的东西。在我们的例子中,Ant并不是一个真正的问题。我们在Netbeans中设置项目,使用Ant进行构建,我们只需要在Netbeans提供的现有脚本中实现一些钩子,这很容易做到。

编辑:看起来你可以从Groovy调用Ant。这样会很好,因为这样你就可以重新使用Ant已经存在的所有任务。

http://groovy.codehaus.org/Using+Ant+from+Groovy

答案 10 :(得分:0)

我尽可能地使用Rake。你需要构建java代码的地方,你可以在jruby中使用它,或者看看类似的东西:buildr

答案 11 :(得分:0)

尝试FinalBuilder

它为您的构建过程提供了一个GUI界面,并且几乎可以为所有内容提供原生动作,还有一个动作工作室,您可以在其中创建自己的动作。

通过一些计划可以非常精简。

答案 12 :(得分:0)

我必须添加这些解决方案,我发现我不能没有...它被称为Hudson。设置只需几秒钟,您通常可以使用现有ANT文件的大部分内容。

此外,Hudson提供了一种很好的方式来“cron”构建,执行测试用例,并以任何人都可以下载的方式生成“工件”(例如构建产品)。

很难捕捉到它能为你做的一切......所以试一试......你不会失望的。

答案 13 :(得分:0)

Maven是做大型构建的不错选择......在大多数情况下,它不起作用非常简单。人们误解了Maven的概念。如果您正在使用“maven方式”,那么最终将使用更小的模块,从而为您的软件提供更好的架构。另一方面,像Hudson这样的东西会通过使用Maven来减少构建时间,因为Hudson支持只构建任何其他构建工具不支持的已更改模块。 Maven的问题是学习和理解Maven的概念,例如项目的结构(文件夹等)或只有一个工件等。构建周期将在不同的领域为您提供支持:编译,打包,部署和发布这是其他工具不支持的(只有你手工实现它...我已经编写了许多大型Ant脚本才能达到这个目标)......其他问题如时间的变化是由忽略最佳实践和引脚指向引起的使用的版本。

答案 14 :(得分:-1)

我主要使用Ant,但Maven也是一个很好的工具。有了蚂蚁,你可以做任何你想做的事。

在我们公司,我们创建了一个通用的ant构建器,它可以完成很多工作:构建,压缩图像,缩小,生成文档,打包文件。它是开源的,我们乐于改进。你可以在这里得到它:

https://github.com/edertone/TurboBuilder