2017-04-07 39 views
1

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

PS:我已经知道,蚂蚁干净会工作,因为它会在编译之前清理我的DESTDIR,但由于一些限制WRT我的应用程序,就像你指出我不能在运行javac的

回答

1

位不同寻常的前清理DESTDIR ,典型的用例是清理destDir目录berfore编译...但是,您可以通过明确选择不再存在于sources目录中的资源来做一些特定的清理工作。您可以使用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> 
相关问题