Ant/Ivy用于项目构建

6
我在考虑将我管理的Maven项目转移到Apache-Ant/Ivy。我需要更多地控制构建过程,并对Maven感到非常沮丧。请不要评论Maven有多好。我的问题是关于Ivy的。
我想设置一个“标准”的Ant构建模板,稍作修改后即可用于其他项目。
我将设置一个中央的“企业”代码库,我们可以将不在公共Maven代码库中的第三方库(例如商业库、Sun库、专有库等)放置在其中。该企业代码库将在我们本地局域网上可用,但可能无法从办公室外部访问。
每个开发人员都将拥有一个私有repository,位于~/.ivy/repository。我希望Ant构建自动从企业代码库更新此私有repository中的库变更版本。
~/.ivy/ant中,我计划放置“标准”模块,以包含在个人项目的build.xml文件中,使用Ant 1.8中的include任务。这些模块将提供各种Scala和Clojure编译目标,不同版本的Scala和Clojure将有不同的版本(例如:scala-compile-2.9.1.xmlclojure-compile-1.3.xml等)构建模块可在企业repository中使用,并且如果更改,应自动更新私有repositories中的模块。
每个项目将遵循标准的Maven目录结构:${project}/src/main/java${project}/target/classes等。
过去,我尝试使用Ivy,但Ant构建文件变得非常大(模板构建文件> 500行),难以管理/编辑。我希望通过将标准目标放在~/.ivy/ant目录中的它们自己的构建模块中来避免代码膨胀。
这可以做到吗?我错了吗?我只能在Apache网站(http://ant.apache.org/ivy)上找到关于Ivy的文档。是否有其他可用的文档,包括书籍?

我认为,您不需要为库创建私有存储库。 Ivy在~/.ivy2中管理自己的缓存,在解析依赖项时会保持其最新状态。 - oers
1个回答

2
将模板构建文件分为可包含的辅助文件是一个相当明智的想法。就个人而言,我正在将一个非常大的项目从Ant(没有依赖管理 - 只是从FTP复制文件)切换到Ant / Ivy解决方案。所以我这样做 - 我有一个里程碑目标文件 - 即准备编译,已编译,准备归档,已存档等等。我想你明白我的意思。我配置了所有这些目标的依赖关系(在Ant的术语中,不要误解)。以这种方式 - 编译取决于准备编译,准备编译取决于初始化 - 类似于这样。这些目标没有正文 - 它们用于包含在多模块项目的每个模块的每个构建文件中。这些目标的唯一目的是维护构建状态,由于这个导入东西变得相当棘手,很难知道哪个目标被覆盖,并且何时运行该目标。但是通过这个文件,我可以轻松地在每个可感知的里程碑上更改vy构建的状态。我想在一个模块中使用外部exe编译帮助文件。没问题 - 在这个项目中,我只需这样做 - 准备归档取决于用于编译帮助的目标。由于这些里程碑目标已包含 - 我只能覆盖其中的一些 - 所有其他目标都将保持所需的构建项目方式。

我策略的另一部分 - 每个特定区域的mixin构建文件。所以我有一个ivy文件。在那里,我放置初始化,解决,发布等等。当我想使用ivy时 - 我只需包含此文件并通过我的里程碑目标管理依赖关系。如果构建是典型的 - 我只需包含此文件并具有约定优于配置功能。所有开箱即用。怎么做?只需与其他mixin组合。 Mixin可以包含其他mixin以依赖它们。因此,每个mixin都是我构建策略的可重复使用部分。来自OOP的东西-单独关注的单位。在你的情况下,它是具有针对Scala内容的特定目标的Scala mixin。

然后我有delegate.xml,它委托子项目的公共构建活动。我有dist,all,test和您想要的任何多模块项目。构建顺序由Ant-Ivy任务buildlist评估。

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

编辑:关于书籍 - 《Ant in Action》可能会对您有所帮助,我从这本书中得到了几个想法,并且我真的强烈推荐每个人阅读它。在那里您可以找到ivy的东西。至于ivy文档-抱歉,这就是所有可用的内容。但是当我遇到这个笨重的ivy + ant时 - 我在私人博客上发现了几篇有趣的文章。那可能以


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