Ant - 如何排除Java测试文件?

时间:2012-09-13 09:55:10

标签: java ant

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

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

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

1 个答案:

答案 0 :(得分:5)

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

<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>

但是,对{(1}}等测试文件采用命名约定可以编写包含/排除模式,如下所示。

复制不包括测试的所有来源

<ClassName>Test.java

<javac> Ant任务支持<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> includes属性,因此您可以直接选择非测试文件,而不是将源文件复制到新目录。

使用excludes Ant任务<javac>includes属性

excludes

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

  • <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" />
  • src/java

或遵循maven惯例:

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

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

src/test/java

相关的stackoverflow问题