我正在使用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)。