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