4

Java コードをソース フォルダーからターゲット フォルダーにコピーしてコンパイルしたいのですが、一部のテスト コードを除外する必要があります。非テストコードのみをコピーするにはどうすればよいですか? たとえば、、、を含めたり除外bb/app/lite2したりしたいbb/app/test1bb/app/cg

exclude 要素を使用できることはわかっていますが、それほど多くの exclude パターンを記述したくありません。だから私はただ使うことができます:

<exclude name="bb/app/**">を使用し<include name="bb/app/lite2">ますか?

4

1 に答える 1

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>

ただし、次のように、テストファイルに命名規則を採用すると、包含<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のタスク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の質問

于 2012-09-13T14:07:38.970 に答える