Как скопировать исходники .java в Ant javac destFolder - PullRequest
4 голосов
/ 01 июня 2010

Я знаю, как использовать Ant для копирования файлов и папок, но меня интересует, если и как я могу, чтобы задача javac копировала те же источники, которые она компилирует, в выходной каталог.

По сути, это очень похоже на вариант включения ваших источников в задачу jar.

Ответы [ 2 ]

2 голосов
/ 11 июня 2012

Я нашел этот ответ на веб-сайте Ant (вы можете удалить часть «исключает», чтобы скопировать исходные файлы .java в скомпилированные версии):

...
<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
    <copy todir="${classes.dir}">
        <fileset dir="${src.dir}" excludes="**/*.java"/>
    </copy>
</target>
...

Это копирует все ресурсы (если они не имеют суффикса ".java") в каталог сборки, поэтому мы можем запустить приложение из этого каталога, и эти файлы будут включены в jar.

2 голосов
/ 01 июня 2010

Почему бы просто не использовать задачу copy вместе с javac one?

Вы даже можете использовать макрос муравья для определения своего собственного *Задача 1009 *, которая выполняет две операции, единственная проблема которой заключается в правильной обработке наборов файлов, для точного копирования набора компилируемых файлов.

Если вы хотите копировать файл только после успешной компиляции, у вас будетлибо создать пользовательскую задачу ant (расширяющую задачу javac по умолчанию), либо поиграть с задачей foreach ant_contrib.

Макроопредел может выглядеть следующим образом:

<macrodef name="copyingjavac">
  <attribute name="srcdir"/>
  <attribute name="destdir""/>
  <element name="arginclude"/>
  <sequential>
    <javac srcdir="@{srcdir}" destdir="@{destdir}" updatedProperty="build.success">
       <arginclude/>
    </javac>
    <copy todir="@{destdir}">
      <fileset dir="@{srcdir}">
        <arginclude/>
      </fileset>
    </copy>
    <fail unless="build.success">
      Build failed. Check the output...
    </fail>
  </sequential>
</macrodef>
...