Подтвердить что ты не робот

Ant <импорт> против задач <include>

Теперь я вижу, что Ant имеет как задачу <include>, так и задачу <import>.

В соответствии с описаниями:

Включить

Включить другой файл сборки в текущий проект.

и

Импорт

Импортирует другой файл сборки в текущий проект.

Итак, зачем использовать один над другим?

Вот моя настоящая проблема:

В нашей текущей системе сборки мы объединяем кучу JavaScripts и минимизируем их. JavaScripts расположены в десятках разных каталогов, и мы берем партии из каждой директории и объединяем их в пять или шесть суперминизированных JavaScripts. Некоторые из этих файлов копируются в несколько супер-скриптов Java.

Чтобы сделать отладку проще, а сборка немного более гибкой, я хочу скопировать все файлы в каталог target/work/resources2 с каждым подкаталогом, находящимся там, где представлен другой суперминимизированный JavaScript. Для целей отладки мы будем включать в себя не минимизированный супер JavaScript и оригиналы. Строка script не сложна, но весь раздел занимает много строк. Я думал о том, чтобы поместить материал <copy> в отдельный XML файл, поэтому все это выглядит так:

<target name="process-resources"
     description="Concatenate and minimize the JavaScripts (using Maven lifecycle names for our targets">
     <!-- The following include the copying stuff -->
     <here.be.dragons file="${basedir}/reservations.xml"/>
     <here.be.dragons file="${basedir}/date.xml"/>
     <here.be.dragons file="${basedir}/select.xml"/>

     <for param="concat.dir">
         <fileset dir="${work.dir]/resources2"/>
         <sequential>
            <here.I.am.concatenating.and.minimizing/>
         </sequential>
    </for>
</target>

Я вижу, что есть четыре возможности:

  • Используйте <ant/> для вызова файлов, выполняющих копирование
  • Используйте <import/> (который может не работать, потому что он не может быть включен в цель)
  • Используйте <include/> (который может не работать, потому что он не может быть включен в цель)
  • Используйте Entity Include.

Я никогда не сумасшедший об использовании <ant/> или <antcall>, хотя это может быть подходящее время для этого. Идея Entity Include будет работать, но что-то большинство людей не понимает, и я боюсь, что это вызовет путаницу для людей, которые должны поддержать то, что я делаю. <import> и <include>, возможно, не смогут использоваться в этой ситуации, но мне все еще интересно, что это за различия.

4b9b3361

Ответ 1

Документация импорта объясняет разницу:

Как импортировать отличные от include?

Краткая версия: используйте импорт, если вы намерены переопределить цель, в противном случае используйте include.

При использовании импорта импортируемые цели доступны до двух имен. Их "нормальное" имя без префикса и потенциально с префиксным именем (значение атрибута as или атрибута импортированного имени проекта, если оно есть).

При использовании include включенные цели доступны только в префиксной форме.

При использовании импорта атрибут атрибута импортированного целевого объекта остается неизменным, то есть он использует "обычные" имена и позволяет переопределять цели в списке зависимостей.

При использовании include включенные цели нельзя переопределить, а их атрибуты, зависящие от атрибута, будут перезаписаны, чтобы использовать префиксные имена. Это позволяет авторам включенного файла контролировать, какая цель вызывается как часть зависимостей.

Можно включить один и тот же файл более одного раза с помощью разных префиксов, невозможно импортировать один и тот же файл более одного раза.