我有一个要求,我只想清理destDir中不再存在于sourceDir中的那些文件。
例如:假设我在sourceDir中有一个类:Student.java和College.java。第一次运行ant任务将生成Student.class和College.class。
现在,如果我从sourceDir中删除Student.java并添加另一个类'Employee.java并运行ant-javac任务,我会在destDir中看到一个新文件'Employee.class',但是旧文件即'Student.class'即使sourceDir中不再存在“ Student.java”,它仍然存在。
我的要求是从destDir中删除不再位于源目录中的所有文件。

PS:我已经知道蚂蚁清理将可以工作,因为它将在编译前清理我的destDir,但是由于我的应用程序的一些限制,我无法在运行javac之前清理destDir

最佳答案

如您所指出的,这有点不寻常,典型的用例是在编译之前清理destDir目录...但是,您可以通过显式选择源目录中不再存在的资源来进行一些特定的清理。您可以使用Selectors选择要删除的资源。如果在destDir任务之前运行以下代码段,则应正确清理javac

<delete>
    <!-- select all classes that do not have a related source file -->
    <fileset dir="${build.dir}" includes="**/*.class">
        <not>
            <present targetdir="${src.dir}">
                <!-- use a regex mapper to handle inner classes -->
                <regexpmapper from="^([^\$]*)(\$.*)?.class" to="\1.java"/>
            </present>
        </not>
    </fileset>
</delete>

09-26 14:54