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>
, возможно, не смогут использоваться в этой ситуации, но мне все еще интересно, что это за различия.
Ответы
Ответ 1
Документация импорта объясняет разницу:
Как импортировать отличные от include?
Краткая версия: используйте импорт, если вы намерены переопределить цель, в противном случае используйте include.
При использовании импорта импортируемые цели доступны до двух имен. Их "нормальное" имя без префикса и потенциально с префиксным именем (значение атрибута as или атрибута импортированного имени проекта, если оно есть).
При использовании include включенные цели доступны только в префиксной форме.
При использовании импорта атрибут атрибута импортированного целевого объекта остается неизменным, то есть он использует "обычные" имена и позволяет переопределять цели в списке зависимостей.
При использовании include включенные цели нельзя переопределить, а их атрибуты, зависящие от атрибута, будут перезаписаны, чтобы использовать префиксные имена. Это позволяет авторам включенного файла контролировать, какая цель вызывается как часть зависимостей.
Можно включить один и тот же файл более одного раза с помощью разных префиксов, невозможно импортировать один и тот же файл более одного раза.