我有一个要求,我只想清理 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:我已经知道 ant clean 会起作用,因为它会在编译之前清理我的 destDir,但是由于我的应用程序的一些限制,我无法在运行 javac 之前清理 destDir
最佳答案
就像您指出的那样,有点不寻常,典型的用例是在编译之前清理 destDir
目录...但是,您可以通过显式选择源目录中不再存在的资源来执行一些特定的清理。您可以使用Selectors选择要删除的资源。如果在 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>
关于java - 如何使用 ant-javac 仅清理 destDir 中不再位于源目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43269744/