gpt4 book ai didi

ant - 避免在 Ant 中重新构建先决条件

转载 作者:行者123 更新时间:2023-12-04 22:34:33 25 4
gpt4 key购买 nike

我有一个现有的 Ant 项目,并希望加快构建过程
通过避免重新构建已经是最新的组件。

Ant 允许您指定一个目标依赖于另一个目标,但是通过
默认每个先决条件总是重建,即使它已经达到
日期。 (这是 Ant 和 make 之间的一个关键区别。默认情况下,make
仅在需要时重新构建目标 - 也就是说,如果某些先决条件是
较新。)

<uptodate property="mytarget.uptodate">  // in set.mytarget.uptodate task
...
</uptodate>
<!-- The prerequisites are executed before the "unless" is checked. -->
<target name="mytarget" depends="set.mytarget.uptodate" unless="mytarget.uptodate">
...
</target>

为了使 Ant 仅在必要时重新构建先决条件,似乎有两个
Ant 中的一般方法。

第一种方法是使用 uptodate设置属性的任务。然后,
只有当属性是(不是)时,您的任务才能测试属性并构建
放。
<uptodate property="mytarget.uptodate">  // in set.mytarget.uptodate task
...
</uptodate>
<!-- The prerequisites are executed before the "unless" is checked. -->
<target name="mytarget" depends="set.mytarget.uptodate" unless="mytarget.uptodate">
...
</target>

另一种方法是使用 outofdate来自 ant contrib 的任务。
更好的是,它只是一个目标,没有单独的属性
定义;相比之下,过时需要单独的目标来设定和
测试属性。

第二种方法是创建一个 <fileset>使用 <modified>选择器。它计算文件的 MD5 哈希值并选择其 MD5
不同于之前存储的值。它是可选的设置
 <param name="cache.cachefile"     value="cache.properties"/>

在选择器内;它默认为“cache.properties”。这是
将所有文件从 src 复制到 dest 的示例,其内容具有
改变:
    <copy todir="dest">
<fileset dir="src">
<modified/>
</fileset>
</copy>

这些都不是很令人满意,因为它需要我写 Ant
应该是自动的流程(避免重新构建)的代码。

还有 Ivy ,但我无法从它的文档中判断它是否
提供此功能。 Ivy 文档中的关键用例似乎
从网上下载子项目而不是避免浪费
通过暂存单个项目的各个部分来工作。 Maven 提供了类似的
功能,在其文档中突出显示了相同的用例。
(将现有的 non-trivila 项目迁移到 Maven 据说是一场噩梦;
相比之下,使用 Maven 开始全新开发更容易接受。)

有没有更好的办法?

最佳答案

这种大型构建的条件编译是我最初在 ANT 中错过的 make 的一个特性。我建议不要使用目标依赖项,而是将您的大型项目分成更小的模块,每个模块都发布到一个公共(public)共享存储库。

然后可以使用 Ivy 来控制项目主模块使用的组件版本。

<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="multi_module_project"/>
<publications>
<artifact name="main" type="jar"/>
</publications>
<dependencies>
<dependency org="com.myspotontheweb" name="component1" rev="latest.integration"/>
<dependency org="com.myspotontheweb" name="component2" rev="latest.integration"/>
<dependency org="com.myspotontheweb" name="component3" rev="latest.integration"/>
<dependency org="com.myspotontheweb" name="component4" rev="latest.integration"/>
</dependencies>
</ivy-module>

Ivy :检索任务只会下载/复制其中一个已更改的子模块(从其构建文件中发布)

这一切听起来更复杂,但也许您已经在构建文件中分割了项目......例如,如果您的 ANT 最新 任务依赖于构建工件之一。

关于ant - 避免在 Ant 中重新构建先决条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1861569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com