【问题标题】:How to configure lazy or incremental build in general with Ant?通常如何使用 Ant 配置惰性或增量构建?
【发布时间】:2011-03-14 01:50:31
【问题描述】:

Java 编译器提供增量构建,因此 javac ant 任务也是如此。但大多数其他进程没有。

考虑到构建过程,它们将一组文件(源)转换为另一组文件(目标)。

我可以在这里区分两种情况:

  1. 转换器不能获取源文件的子集,只能获取整个集。在这里我们只能进行惰性构建 - 如果源文件没有被修改 - 我们会跳过处理。
  2. 转换器可以获取源文件的子集并生成部分结果 - 增量构建

什么是 ant 内部、第三方扩展或其他工具来实现惰性和增量构建? 您能否提供一些广泛使用的构建文件示例?

我特别感兴趣的是与 GWT 编译器一起工作。

【问题讨论】:

    标签: gwt ant build-process build-automation


    【解决方案1】:

    uptodate 任务是 Ant 对该问题的通用解决方案。它足够灵活,可以在大多数需要惰性或增量编译的情况下工作。

    我遇到了和你一样的问题:我有一个 GWT 模块作为我的代码的一部分,我不想在不需要时支付重新编译它的(巨额!)成本。我的解决方案看起来像这样:

    <uptodate property="gwtCompile.mymodule.notRequired"
      targetfile="www/com.example.MyGwtModule/com.example.MyGwtModule.nocache.js">
        <srcfiles dir="src" includes="**"/>
    </uptodate>
    
    <target name="compile-mymodule-gwt" unless="gwtCompile.mymodule.notRequired">
        <compile-gwt-module module="com.example.MyGwtModule"/>
    </target>
    

    【讨论】:

      【解决方案2】:

      与 GWT 相关,无法进行增量构建,因为 GWT 编译器会同时查看所有源代码并优化和内联代码。这意味着可以对未更改的代码进行不同的评估,例如,如果您开始使用未更改的类中的方法,则该方法在上一个编译步骤中被省略,但现在需要编译。

      【讨论】:

      • 但可以肯定的是,影响 GWT 模块输出的任何代码都可能没有更改,因此该模块不需要重新编译。影响输出的更改是 中包含的任何内容
      • @Andrew 不,没有必要。因为 GWT 编译器会删除所有未使用的代码。因此,如果您开始使用该模块中的方法,它将不可用。还因为内联优化发生在实际 JavaScript 生成之前。也许可以缓存中间结果,但我不确定这是否有效,因为这些结果需要再次解释并读/写到磁盘,而不是保存在内存中。
      • 但是如果自上次编译后没有 Java 源(用于生成 JS 输出)发生变化,则无需重新编译任何内容,包括优化和内联和代码删除.....
      猜你喜欢
      • 1970-01-01
      • 2012-09-04
      • 2015-09-10
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多