我想将Java代码从源文件夹复制到目标文件夹并编译它,但需要排除一些测试代码。我怎样才能只复制非测试代码?例如,我想包含bb/app/lite2
和排除bb/app/test1
, bb/app/cg
,...
我知道我可以使用排除元素,但我不想写这么多排除模式。所以我可以使用:
<exclude name="bb/app/**">
然后使用<include name="bb/app/lite2">
?
鉴于您的问题中提到的目录结构,听起来您的所有非测试代码都在目录中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>
但是,为您的测试文件采用命名约定,例如<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>
<javac>
Ant 任务的支持includes
和excludes
属性,因此您可以直接选择非测试文件,而不是将源文件复制到新目录。
<javac>
Ant 任务includes
和excludes
属性<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" />