Ant`javac`任务的时间敏感性

时间:2018-07-05 15:45:03

标签: java ant compilation

我正在使用Ant 1.9.6。

SSCCE是here

在决定是否需要重新编译源文件时,Ant javac任务使用的时间敏感度是多少?

我通过触摸特定的Java文件进行了实验,并注意到没有触发任务的情况。我使用stat -c '%y'来获取*.java*.class文件的准确读数。

例如修改时间戳具有以下差异(非常微小)(源文件为第一,类文件为第二):

2018-07-05 10:34:06.243947102 -0400
2018-07-05 10:34:05.295473134 -0400

...我注意到compile任务实际上并未编译文件。当差异更大时:

2018-07-05 10:29:46.193996294 -0400
2018-07-05 10:29:43.328564395 -0400

... compile任务确实编译了被触摸的文件。

通过实验,看来Ant的compile任务编译文件的时间差必须超过1秒。

这是我用来快速触摸文件,打印时间修改时间戳并调用ant的脚本:

touch src/A.java ; stat -c '%y' src/A.java build/classes/A.class  ; ant compile 2>&1 | grep Compiling ; stat -c '%y' src/A.java build/classes/A.class 

我的build.xml很简单:

<?xml version="1.0" encoding="UTF-8"?>
<project name="foo"
         basedir="."
         default="compile"
>

    <!-- using fork="true" or even using an external compiler with:

            executable="/some/path/to/jdk-1.7.0.95.Linux64/bin/javac

         makes no difference.
    -->

    <target name = "compile">
        <mkdir dir="${basedir}/build/classes"/>        
        <javac compiler="modern"
               srcdir="${basedir}/src"
               destdir="${basedir}/build/classes"
               source="1.7"
               target="1.7"
               verbose="no"
               >
            <include name="**/*.java"/>
        </javac>
    </target>

    <target name="clean">
        <delete dir="${basedir}/build"/>
    </target>

</project>

...编译的类也是如此:

$ cat src/A.java 
public class A{}

(有关更多信息,请参见github SSCCE)。

0 个答案:

没有答案