java - 如何使用 ant-javac 仅清理 destDir 中不再位于源目录中的文件

标签 java ant build javac

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

相关文章:

build - 在 Debug 和 Release 配置之间切换

java - 如何使用java从数据库下载数据为csv?

java - 在 Java JNI 编程中使用 std::string 时的性能和内存使用情况

java - VideoView 添加多个视频并播放

linux - 构建内核补丁 : Error MODPOST 0

支持创建 "wizard-like"命令行应用程序的 Java 框架/库

java - 斯坦福CoreNLP 是否已被弃用?

Eclipse v4.7.1a : ant build broken: Launch configuration <build. 文件>引用不存在的项目<容器项目>

ant - 如何从ant构建文件读取属性到gradle构建脚本?

java - 在哪里可以找到编译 servlet 所需的 javax.servlet 类?