【问题标题】:How do I clean only those files from destDir that are no longer in my source dir using ant-javac如何使用 ant-javac 仅清除 destDir 中不再位于我的源目录中的那些文件
【发布时间】:2017-09-02 08:15:02
【问题描述】:

我有一个要求,我只想清理我的 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

【问题讨论】:

    标签: java ant build javac


    【解决方案1】:

    像您指出的那样有点不寻常,典型的用例是在编译之前清理destDir 目录...但是您可以通过明确选择源目录中不再存在的资源来进行一些特定的清理。您可以使用Selectors 选择要删除的资源。如果在 javac 任务之前运行,则以下 sn-p 应该正确清理您的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多