Ant / Ivy用于项目建设

时间:2011-12-20 12:42:56

标签: ant clojure ivy

我正在考虑将我管理的Maven项目切换为Apache-Ant / Ivy。我需要更多地控制构建过程,并且对Maven感到非常沮丧。请不要评论Maven有多棒。我的问题是关于常春藤。

我想设置一个“标准”Ant构建模板,以后可以用于其他项目,但变化很小。

我将建立一个中央“企业”存储库,我们可以放置在公共Maven存储库中不可用的第三方库(例如商业库,Sun库,专有库等)。此企业存储库将在我们的本地LAN上提供,但可能无法从办公室外部使用。

每个开发人员都将在~/.ivy/repository中拥有一个私有存储库。我希望Ant构建能够使用企业存储库中已更改的库版本自动更新此私有存储库。

~/.ivy/ant中,我计划使用Ant 1.8中的build.xml任务放置“标准”模块以包含在单个项目include文件中。这些模块将为ScalaClojure编译目标提供不同的版本,用于不同的Scala和Clojure版本(例如:scala-compile-2.9.1.xmlclojure-compile-1.3.xml等。)构建模块将可以在企业存储库中使用,如果它们发生变化,应该在私有存储库中自动更新。

每个项目都将遵循标准的Maven目录结构:${project}/src/main/java${project}/target/classes等。

过去,我尝试使用常春藤,但Ant构建文件非常大(模板构建文件大约为500行),难以管理/编辑。我希望通过将标准目标放在~/.ivy/ant目录中的自己的构建模块中,我可以避免代码膨胀。

可以这样做吗?我离开基地了吗?我在Ivy上找到的唯一文档是在Apache网站(http://ant.apache.org/ivy)。还有其他文件,包括书籍吗?

1 个答案:

答案 0 :(得分:2)

将模板构建文件划分为可包含的帮助文件的相当明智的想法。就个人而言,现在我正在切换一个非常大的项目,从ant(根本没有依赖管理 - 只从ftp复制文件)到ant / ivy解决方案。所以我这样做了 - 我有一个里程碑目标的文件 - 即准备编译,编译,准备存档,存档 - 等等。我想你明白了。我已经配置了所有这些目标的依赖关系(依赖于ant的依赖关系,不要误解我)。以这种方式 - 编译依赖于ready-to-compile,ready-to-compilede取决于初始化 - 像这样的smth。这些目标没有正文 - 它们包含在多模块项目的每个模块的每个构建文件中。这个目标的唯一目的是维护构建的状态,因为这些导入的东西变得相当棘手,而且很难知道什么目标被覆盖,以及何时运行这个目标。但是通过这个文件,我可以轻松地在每个合理的里程碑上改变vy构建的状态。我想在一个模块中使用exteran exe编译帮助文件。没问题 - 在这个项目中我只是这样做 - 准备存档取决于编译帮助的目标。由于这个里程碑目标包含在内 - 我只能覆盖其中的一些目标 - 所有其他目标都会预先建立项目所需的方式。

我的策略的另一部分 - mixins构建文件 - 适用于每个特定领域。所以我有一个常春藤的文件。我在那里进行初始化,解析,发布等。当我想使用常春藤时 - 我只是包含这个文件并通过我的里程碑目标来管理depdendencies。如果构建是典型的 - 我只包含此文件并具有约定优于配置的功能。一切都开箱即用。怎么样??只需与其他mixin结合使用。 Mixins可能包含其他mixins以依赖它们。所以每个mixin都是我构建策略的可重用部分。来自OOP的东西 - 单一关注单位。在你的情况下,它是scala mixin与scala特定的目标。

然后我有delegate.xml委托子项目的常见构建活动。我有dist,all,test和你想要的多模块项目。使用ant-ivy任务构建列表评估构建顺序。

还有一些其他文件 - 但这是战略性的基本文件,帮助我使用这个BIG和VERY Conservative项目进行可重复使用和可维护的构建。所以,如果您对细节感兴趣,请不要害羞并与我联系。我将非常乐意为您提供帮助,因为常春藤文档真的很复杂且不完整。

编辑:关于书籍 - Ant in Action可能会对你有所帮助,我从这本书中提出了一些想法,我非常强烈建议大家阅读。你也可以找到常春藤的东西。关于常春藤文档 - 抱歉,这一切都是可用的。但是当我遇到这个笨重的常春藤+蚂蚁的麻烦时 - 我在私人博客上发现了几篇有趣的文章。所以...这可能会填补这个空白。