【问题标题】:Ant - How to exclude Java test files?Ant - 如何排除 Java 测试文件?
【发布时间】:2012-09-14 01:28:36
【问题描述】:

我想将Java代码从源文件夹复制到目标文件夹并编译它,但需要排除一些测试代码。我怎样才能只复制非测试代码?比如我想包含bb/app/lite2,排除bb/app/test1,bb/app/cg,...

我知道我可以使用 exclude 元素,但我不想写这么多的 exclude 模式。所以我可以使用:

<exclude name="bb/app/**"> 然后使用<include name="bb/app/lite2">?

【问题讨论】:

    标签: java ant


    【解决方案1】:

    鉴于您的问题中提到的目录结构,听起来您所有的非测试代码都在目录bb/app/lite2 中。在这种情况下,只要bb/app/lite2出现在指定的源目录下方,您就可以编写<copy>任务如下:

    <property name="source.dir" location="${basedir}/src" />
    <property name="target.dir" location="${basedir}/target" />
    
    <copy todir="${target.dir}" overwrite="true">
      <fileset dir="${source.dir}" includes="bb/app/lite2/**/*.java" />
    </copy>
    

    但是,为您的测试文件采用命名约定(例如 &lt;ClassName&gt;Test.java)可以编写包含/排除模式,如下所示。

    复制除测试之外的所有来源

    <property name="source.dir" location="${basedir}/src" />
    <property name="target.dir" location="${basedir}/target" />
    
    <copy todir="${target.dir}" overwrite="true">
      <fileset dir="${source.dir}" 
          includes="**/*.java" excludes="**/*Test.java" />
    </copy>
    

    &lt;javac&gt; Ant 任务支持includesexcludes 属性,因此您可以直接选择非测试文件,而不是将源文件复制到新目录。

    使用&lt;javac&gt; Ant 任务includesexcludes 属性

    <property name="source.dir" location="${basedir}/src" />
    <property name="classes.dir" location="${basedir}/build/classes" />
    
    <javac srcdir="${source.dir}" destdir="${classes.dir}"
        includes="**/*.java" excludes="**/*Test.java"
        classpathref="my.classpath" debug="on" deprecation="on" />
    

    正如David W. 在他的评论中提到的,另一个约定(可以与文件命名约定结合使用)是将测试代码放在单独的目录中。例如,

    • src/java
    • test/src/java

    或遵循 maven 约定:

    • src/main/java
    • src/test/java

    然后编译您的非测试源代码很简单,因为您不必指定包含/排除模式:

    <property name="source.dir" location="${basedir}/src/java" />
    <property name="classes.dir" location="${basedir}/build/classes" />
    
    <javac srcdir="${source.dir}" destdir="${classes.dir}"
        classpathref="my.classpath" debug="on" deprecation="on" />
    

    stackoverflow 相关问题

    【讨论】:

    • 实际上,更好的方法是遵循 Maven 约定(即使您不使用 Maven)并将测试代码和常规代码放在不同的目录中。在 Maven 中,一个在 src/main/java 中,而另一个在 src/test/java 中(我将留给读者来判断哪个是哪个)。您还可以将 jar 中需要但不是 java 文件的资源放入src/main/resources。如果它不是全部在一个目录中,则可以更轻松地完成您的工作。否则,将&lt;include name="..."/&gt;&lt;exclude name="..."/&gt; 子任务用于&lt;fileset/&gt; 命令。
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2011-12-09
    • 1970-01-01
    • 2014-03-22
    • 2011-08-28
    • 2017-06-25
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多