【问题标题】:how to compile only changed source files using ANT如何使用 ANT 仅编译更改的源文件
【发布时间】:2013-02-28 06:20:49
【问题描述】:

我正在尝试编写用于编译源文件夹的 ant build 这是我的脚本 target 用于编译。

 <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true">
            <classpath refid="master-classpath"/>
        </javac>

    </target>

在我的项目中,我有将近 1000 个 .java 文件。当单个.java 文件在目标之上更改时,往往会编译所有.java 文件。这使得开发非常缓慢。我只想知道是否有任何方法或代码可以更改任务的行为以仅编译修改或更改的.java 文件而不是所有.java 文件。

请帮帮我。

【问题讨论】:

  • 我查过了。那是为了执行任务而不是编译。
  • 我们只想编译修改过的文件
  • @NikolayKuznetsov 不,我正在尝试从命令提示符编译。

标签: java performance ant compilation


【解决方案1】:

据我了解,仅编译修改后的 java 文件是 ant javac 任务的默认行为。 Ant 使用 .java 文件的时间戳及其对应的 .class 文件来确定是否需要重新编译 Java 文件。我在很多项目中都使用过它,从来没有遇到过问题。

您可以检查以下几点

  1. 您的源代码树目录结构是否与您的 Java 包匹配 结构体?请参阅Why does ant always recompile all my Java files?。这可能是第一个原因,因为它在常见问题解答中。

  2. 我看到你的compile 目标依赖于init 目标? init 目标有什么作用?它是否依赖于任何clean 目标或是否清理 .class 文件?

  3. 你的 ant 版本是多少?能不能换个ant版本试试看是否还有同样的问题?

  4. 如果以上方法都不能解决你的问题,编译后是否可以手动检查.class文件的时间戳,并与对应的.java文件的时间戳进行比较?

【讨论】:

    【解决方案2】:

    因此,如果您不删除任何依赖任务中的类目录,请说“清理”,javac 任务本质上只编译更改的 java 文件。这是 javac 任务提供的开箱即用功能。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 2016-05-21
      • 2011-12-10
      • 2018-08-22
      • 1970-01-01
      • 2010-09-17
      • 2011-05-30
      • 1970-01-01
      • 2014-12-01
      相关资源
      最近更新 更多