2009-03-26 1 views
3

Я пытаюсь заставить ant4eclipse работать, и я использовал муравьев немного, но не намного выше простого языка сценариев. У нас есть несколько папок с исходными в наших Eclipse, проекты так что пример в документации ant4eclipse нуждается в адаптации:Как «развернуть» путь муравья (доступ с refId = ..) ко всем файлам на пути, кроме некоторых?

В настоящее время я следующее:

<target name="build"> 

    <!-- resolve the eclipse output location --> 
    <getOutputpath property="classes.dir" workspace="${workspace}" projectName="${project.name}" /> 

    <!-- init output location --> 
    <delete dir="${classes.dir}" /> 
    <mkdir dir="${classes.dir}" /> 

    <!-- resolve the eclipse source location --> 
    <getSourcepath pathId="source.path" project="." allowMultipleFolders='true'/> 

    <!-- read the eclipse classpath --> 
    <getEclipseClasspath pathId="build.classpath" 
          workspace="${workspace}" projectName="${project.name}" /> 

    <!-- compile --> 
    <javac destdir="${classes.dir}" classpathref="build.classpath" verbose="false" encoding="iso-8859-1"> 
    <src refid="source.path" /> 
    </javac> 

    <!-- copy resources from src to bin --> 
    <copy todir="${classes.dir}" preservelastmodified="true"> 
    <fileset refid="source.path"> 
     <include name="**/*"/> 
     <!-- 
     patternset refid="not.java.files"/> 
     --> 
    </fileset> 
    </copy> 
</target> 

задача выполняется успешно, но я не могу получить работу - это должен копировать все файлы, отличные от java, слишком для эмуляции поведения eclipse.

Итак, у меня есть pathId с именем source.path, который содержит несколько каталогов, которые мне как-то нужно массировать во что-то вроде задачи копирования. Я пробовал вложенность, которая недействительна, и некоторые другие дикие догадки.

Как это сделать - заблаговременно.

ответ

2

Вы можете использовать foreach задачу из ant-contrib библиотеки:

<target name="build"> 
    ... 

    <!-- copy resources from src to bin --> 
    <foreach target="copy.resources" param="resource.dir"> 
     <path refid="source.path"/> 
    </foreach> 
</target> 

<target name="copy.resources"> 
    <copy todir="${classes.dir}" preservelastmodified="true"> 
     <fileset dir="${resource.dir}" exclude="**/*.java"> 
    </copy> 
</target> 

Если ваш source.path содержит пути к файлам, а затем вы могли if задачи (также от муравьев-вно), чтобы предотвратить попытки скопировать файлы путь к файлу, например

<target name="copy.resources"> 
    <if> 
     <available file="${classes.dir}" type="dir"/> 
     <then> 
      <copy todir="${classes.dir}" preservelastmodified="true"> 
       <fileset dir="${resource.dir}" exclude="**/*.java"> 
      </copy> 
     </then> 
    </if> 
</target> 
+0

Это было то, что я в конечном итоге делаю. Обратите внимание, что для любой достаточно полной Eclipse-эмулирующей системы сборки это выходит из-под контроля. –

3

Вы могли бы рассмотреть возможность использования pathconvert построить модель, которая fileset includes может работать.

<pathconvert pathsep="/**/*," refid="source.path" property="my_fileset_pattern"> 
    <filtermapper> 
     <replacestring from="${basedir}/" to="" /> 
    </filtermapper> 
</pathconvert> 

Это заполнит ${my_fileset_pattern} со строкой как:

1/**/*,2/**/*,3 

если source.path состоявшей из трех каталогов 1, 2 и 3 под BASEDIR. Мы используем pathsep для вставки подстановочных знаков, которые позже будут расширены до полного набора файлов.

Свойство теперь можно использовать для создания набора файлов всех файлов. Обратите внимание, что дополнительный трейлинг /**/* необходим, чтобы развернуть последний каталог в наборе. Исключение может быть применено в этот момент.

<fileset dir="." id="my_fileset" includes="${my_fileset_pattern}/**/*"> 
    <exclude name="**/*.java" /> 
</fileset> 

Копия всех без файлов Java становится:

<copy todir="${classes.dir}" preservelastmodified="true"> 
    <fileset refid="my_fileset" /> 
</copy> 

Это будет скопировать исходные файлы через сохраняя структуру каталогов источника под todir. При необходимости атрибут flatten задачи копирования может быть установлен, чтобы вместо этого сделать все исходные файлы копиями непосредственно на todir.

Обратите внимание, что пример pathconvert здесь для файловой системы unix, а не для окон. Если что-то портативное необходимо, то file.separator свойства следует использовать для создания шаблона:

<property name="wildcard" value="${file.separator}**${file.separator}*" /> 
<pathconvert pathsep="${wildcard}," refid="source.path" property="my_fileset"> 
... 
Смежные вопросы