Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免在Ant中重建先决条件_Ant_Build Automation_Dependencies_Ivy - Fatal编程技术网

避免在Ant中重建先决条件

避免在Ant中重建先决条件,ant,build-automation,dependencies,ivy,Ant,Build Automation,Dependencies,Ivy,我有一个现有的Ant项目,希望加快构建过程 避免重新构建已更新的组件 Ant允许您指定一个目标依赖于另一个目标,但是 默认情况下,始终重建每个先决条件,即使它已达到 日期。(这是Ant和make之间的关键区别。默认情况下,make 仅在需要时重新构建目标——也就是说,如果满足某些先决条件 更新的。) 另一种第一种方法是使用ant contrib提供的outofdate任务。 更好的是,它只是一个目标,没有单独的属性 定义相比之下,过时需要单独的目标来设定和执行 测试属性 第二种方法是使用 选择器

我有一个现有的Ant项目,希望加快构建过程 避免重新构建已更新的组件

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

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

第二种方法是使用
选择器。它计算文件的MD5哈希,并选择其MD5 与以前存储的值不同。这是可选的设置

 <param name="cache.cachefile"     value="cache.properties"/>

选择器内部;它默认为“cache.properties”。这是 将所有文件从src复制到dest的示例,该文件的内容 更改:


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

也有常春藤,但我无法从它的文档中判断它是否是常春藤 提供此功能。常春藤文档中的关键用例似乎是 从互联网下载子项目,而不是避免浪费 通过将单个项目的各个部分分阶段进行工作。Maven提供了类似的解决方案 功能,并在其文档中突出显示相同的用例。 (将现有的非trivila项目转移到Maven据说是一场噩梦; 相比之下,从Maven开始绿地开发更容易接受。)


有更好的方法吗?

这种对大型构建的有条件编译是make的一个特性,我在ANT中一开始就忽略了这一特性。我建议不要使用目标依赖项,而是将您的大型项目划分为较小的模块,每个模块都发布到一个公共共享存储库中

然后可以使用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:retrieve任务将仅下载/复制其中一个子模块(如果它们已更改)(从其构建文件发布)


这听起来更复杂,但可能您已经在构建文件中细分了项目。。。。例如,如果您的ANTUpdate任务依赖于一个构建工件。

这将起作用。它确实需要以精细的粒度完全重新设计我继承的项目,在某些情况下,将其重新设计为不自然的独立实体子项目。这正是我所担心的。看看“常春藤建造列表”任务。这可以基于各种项目组件的声明依赖关系来控制整个项目构建。是的,您的项目将需要重组,但您可能会发现它类似于构建过程,并提高了整个体系结构的可见性。这是一个个案电话
 <param name="cache.cachefile"     value="cache.properties"/>
    <copy todir="dest">
        <fileset dir="src">
            <modified/>
        </fileset>
    </copy>
<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>