Java Ant不重建新的源?

Java Ant不重建新的源?,java,ant,Java,Ant,我试图找出是什么原因导致Ant无法重建具有更新源的依赖项 我有几个包,每个包在Ant中都有自己的构建目标。其中一个目标mds依赖于另一个目标robotsim。如果我没能在依赖项列表中添加这一点,我会有疯狂的行为,它只会偶尔构建,我想知道何时以及为什么 $ ant clean mds ... BUILD SUCCESSFUL 此时,我打开robotsim包中的一个java文件并删除一个分号 $ ls -l src/com/robotsim/model/Robot.java -rw-rw-r--

我试图找出是什么原因导致Ant无法重建具有更新源的依赖项

我有几个包,每个包在Ant中都有自己的构建目标。其中一个目标mds依赖于另一个目标robotsim。如果我没能在依赖项列表中添加这一点,我会有疯狂的行为,它只会偶尔构建,我想知道何时以及为什么

$ ant clean mds
...
BUILD SUCCESSFUL
此时,我打开robotsim包中的一个java文件并删除一个分号

$ ls -l src/com/robotsim/model/Robot.java 
-rw-rw-r-- 1 matt matt 6.3K 2012-05-15 14:28 src/com/robotsim/model/Robot.java
$ ls -l build/com/robotsim/model/Robot.class 
-rw-rw-r-- 1 matt matt 6.6K 2012-05-15 14:13 build/com/robotsim/model/Robot.class
$ ant mds
...
BUILD SUCCESSFUL
$ ant clean mds
...
[javac] Robot.java:110: ';' expected
...
BUILD FAILED
所以问题是,为什么第二次构建成功了

编辑以包含build.xml的相关部分:

<target name='init'>
    <mkdir dir='${build.dir}'/>
    <mkdir dir='${dist.dir}'/>
</target>
...
<target name='customTasks'>
    <javac srcdir='${customTasks.src.dir}' destdir='${ant.library.dir}' classpathref='customTasks.classpath' failonerror='false'/>
    <taskdef name='protoc' classname='com.hrilab.Protoc' classpath="${ant.library.dir}"/>
</target>
...
<target name='algorithms' depends='init' extensionOf='compile' description='Builds a few generic algorithms'>
    <build-java package.dir='com/algorithms'/>
</target>
...
<target name='engine3d' depends='init' extensionOf='compile' description='Builds the 3D engine'>
    <build-java package.dir='com/engine3D'/>
</target>
...
<target name='humanoid' depends='init,utilities' extensionOf='compile' description='Builds the humanoid servers.'>
    <build-java package.dir='com/humanoid'/>
</target>
...
<target name='mds' depends='init,algorithms,engine3d,humanoid' extensionOf='compile' description='Builds the servers for the Xitome MDS.'>
    <build-java package.dir='com/mds'/>
</target>
...
<target name='robotsim' depends='init,customTasks' extensionOf='compile' description='Builds the 3D robot simulator'>
    <protoc minversion='2.4.0' srcfile='com/robotsim/calibration/leng/calibration_server_config.proto' destdir='${src.dir}'/>
    <protoc minversion='2.4.0' srcfile='com/robotsim/calibration/leng/extrinsic_parameters_collection.proto' destdir='${src.dir}'/>
    <build-java package.dir='com/robotsim'/>
</target>
...
<target name='utilities' depends='init' extensionOf='compile' description='Builds some common utilities'>
    <build-java package.dir='utilities'/>
</target>
...
<macrodef name='build-java'>
    <attribute name='classpath' default='base.classpath'/>
    <attribute name='package.dir' default='NOT SET'/>
    <attribute name='package.mask' default='**'/> <!-- HACK: please do not use this attribute, it's only here to hack around the way we have our source laid out -->
    <sequential>
        <javac srcdir='${src.dir}' destdir='${build.dir}' includes='@{package.dir}/@{package.mask}' debug='${debug.enabled}' debuglevel='${debug.level}'>
            <classpath refid='@{classpath}'/>
        </javac>
    </sequential>
</macrodef>

查看build.xml会有帮助;基于类文件的存在,第一个目标似乎成功了,而干净的mds失败了,因为类文件已经消失,必须重新编译…添加了更多详细信息。让我感兴趣的是,它在文章中说应该重建较新的java文件,但情况似乎并非总是如此。Hrm,我认为我们至少需要所有depends属性来查看预期的事件链。。。e、 g.对于算法,引擎3d。不过,可能不是这些目标的实际内容。另外,您是否尝试过提高ant日志级别以查看它认为它应该做什么?根据您的建议,我正在仔细检查前两种情况的-debug输出,但我并不是100%了解我应该寻找什么。我把这两个词都改成了“机器人”,没有得到任何有用的点击。看起来第二个成功的原因是Robot.java根本没有调用过javac。这意味着问题是为什么它第一次构建?我猜这是因为com/robotsim/目录将构建在robotsim目标中。由于mds和robotsim是同类的兄弟,它们都扩展了compile,而且mds没有显式地依赖robotsim,所以这些类文件被保留了下来。如果您在com/mds/中更改了某些内容,那么它可能会被重新编译。或者如果您执行了clean compile或clean dist或类似的操作。