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

ter*_*rry 4 java ant

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

我知道我可以使用exclude元素,但我不想写出这么多排除模式.所以我可以使用:

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

Chr*_*ert 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>
Run Code Online (Sandbox Code Playgroud)

但是,为您的测试文件采用命名约定<ClassName>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>
Run Code Online (Sandbox Code Playgroud)

<javac>Ant任务支持includesexcludes属性,因此而不是一个新的目录复制源文件,你可以直接选择非测试文件.

使用<javac>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" />
Run Code Online (Sandbox Code Playgroud)

正如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" />
Run Code Online (Sandbox Code Playgroud)

相关的stackoverflow问题