Ant/Ivy用于项目建设

Ral*_*lph 6 ant clojure ivy

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

我想建立一个"标准"Ant构建模板,以后可以用于其他项目,只需要很少的更改.

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

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

~/.ivy/ant,我计划build.xml使用includeAnt 1.8中的任务放置"标准"模块以包含在单个项目文件中.这些模块将提供之类的东西Scala,并Clojure汇编目标与不同版本的不同Scala和Clojure的版本(如:scala-compile-2.9.1.xml,clojure-compile-1.3.xml等)构建模块将在企业仓库中,应该如果他们改变在私有仓库自动更新.

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

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

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

bor*_*oni 2

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

我的策略的另一部分 - mixins 构建文件 - 针对每个特定区域。所以我有一个常春藤文件。我在那里放置了初始化、解析、发布等。当我想使用 ivy 时 - 我只需包含此文件并通过我的里程碑目标管理依赖关系。如果构建是典型的 - 我只包含此文件并具有约定优于配置的功能。全部开箱即用。如何??只需与其他 mixins 结合即可。Mixins 可能包含其他依赖于它们的 mixin。因此,每个 mixin 都是我的构建策略中可重用的一部分。来自 OOP 的东西——单一关注单元。在你的例子中,它是 scala mixin 与特定于 scala 内容的目标。

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

还有一些其他文件 - 但这些是战略上的基本文件,帮助我通过这个大且非常保守的项目进行可重用和可维护的构建。因此,如果您对详细信息感兴趣,请不要害羞并与我联系。我很乐意为您提供帮助,因为 ivy 文档非常复杂且不完整。

编辑:关于书籍 - Ant in Action 可能对你有帮助,我从这本书中汲取了一些想法,我真的强烈推荐大家阅读。在那里你还可以找到常春藤的东西。关于 ivy 文档 - 抱歉,这是所有可用的。但是当我遇到麻烦的 ivy+ant 时 - 我在私人博客上发现了几篇有趣的文章。所以......这可能会以某种方式填补空白。