如何使用 ant-javac 仅从 destDir 中清除那些不再在我的源目录中的文件



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

PS:我已经知道 ant clean 可以工作,因为它会在编译之前清理我的 destDir,但由于我的应用程序几乎没有限制,我无法在运行 javac 之前清理 destDir。

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

<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>

相关内容

最新更新