Ant: FileSet — один для всех

Есть несколько проектов на PHP в Eclipse. Для выполнения рутинных операций прицепил Ant, немного колдовства 🙂 и build.xml для каждого проекта готов. Всё делалось на скорую руку (копировать/вставить) и в результате - в каждом target повторяется один и тот же FileSet. Рассмотрим пример:

<?xml version="1.0" encoding="UTF-8" ?>
 
<project name="MyProject" default="copy" basedir=".">
  <property name="basedir" value="."/>
 
  <target name="copy">
    <copy todir= "...">
      <fileset dir="...">
        <include name="..."/>
        <exclude name="..."/>
      </fileset>
    </copy>
  </target>
 
  <target name="pack">
    <tar destfile="..." compression="gzip">
      <tarfileset dir="..." `тут еще права и всё такое`>
        <fileset dir="...">
          <include name="..."/>
          <exclude name="..."/>
        </fileset>
      </tarfileset>
    </tar>
  </target>
 
</project>

Неудобство очевидно - в случае изменения, нужно пройтись по всем FileSet'ам и внести изменения. Смотрим мануал Ant'а про FileSet и впитываем тайные знания. Получилось что-то типа:

<?xml version="1.0" encoding="UTF-8" ?>
 
<project name="MyProject" default="copy" basedir=".">
  <property name="basedir" value="."/>
 
  <fileset dir="..." id="IdForFileSet">
    <patternset id="IdForPatternSet">
      <include name="..."/>
      <exclude name="..."/>
    </patternset>
  </fileset>
 
  <target name="copy">
    <copy todir= "...">
      <fileset refid="IdForFileSet" />
    </copy>
  </target>
 
  <target name="pack">
    <tar destfile="..." compression="gzip">
      <tarfileset dir="..." `тут еще права и всё такое`>
        <patternset refid="IdForPatternSet" />
      </tarfileset>
    </tar>
  </target>
 
</project>

Небольшая загвоздка, в tar у меня описан tarfileset для всяких там прав, владельца, группы и

в данном контексте не работает. Для решения этой проблемы include и exclude в общем FileSet'е обрамляем тегом patternset и ссылаемся уже на него

<patternset refid="IdForPatternSet" /">

Вот собственно и всё. Возможно есть и другие варианты, более простые и/или сложные, но в рамках моей текущей задачи, вышеописанный вариант полне устраивает.

Update: а еще можно так

<?xml version="1.0" encoding="UTF-8" ?>
 
<project name="MyProject" default="copy" basedir=".">
  <property name="basedir" value="."/">
 
  <patternset id="IdForPatternSet">
    <include name="..."/">
    <exclude name="..."/">
  </patternset>
 
  <target name="copy">
    <copy todir= "...">
      <fileset basedir="${basedir}">
        <patternset refid="IdForPatternSet" />
      </fileset>
    </copy>
  </target>
 
  <target name="pack">
    <tar destfile="..." compression="gzip">
      <tarfileset dir="..." `тут еще права и всё такое`>
        <patternset refid="IdForPatternSet" />
      </tarfileset>
    </tar>
  </target>
 
</project>

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *