2011-12-20 152 views
6

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

我想设置一个“标准”的Ant构建模板,稍后可以用于其他项目,只需要很少的更改。

我将成立一个中央“企业”的储存库,我们可以把不属于公共Maven仓库(如商业库,太阳库,专利库等)可用的第三方库。该企业存储库将在我们的本地局域网上提供,但可能不在办公室之外。

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

~/.ivy/ant中,我计划使用Ant 1.8中的include任务在单个项目build.xml中包含“标准”模块。这些模块将提供之类的东西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目录中的自己的构建模块中,我可以避免代码膨胀。

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

+0

我不认为,你需要库的私人存储库。 常春藤在〜/ .ivy2中管理自己的[cache](https://ant.apache.org/ivy/history/latest-milestone/concept.html#cache),它会在解决依赖关系时保持最新状态。 – oers 2011-12-20 14:26:13

回答

2

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

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

然后我有委托子项目常见生成活动的委托。我有dist,all,测试和任何你想要的multimodule项目。构建顺序使用ant-ivy任务buildlist进行评估。

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

编辑:关于书籍 - 蚂蚁在行动可能会帮助你,我从这本书中得到了一些想法,我真的强烈建议它让大家阅读。你也可以找到常春藤的东西。关于常春藤文档 - 对不起,这是所有可用的。但是当我遇到这个麻烦的常春藤+蚂蚁的麻烦时 - 我在私人博客上发现了几篇有趣的文章。所以...可能会以某种方式弥补差距。

相关问题