ANT удалить пустые каталоги или с файлом index.html - PullRequest
1 голос
/ 05 марта 2012

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

К сожалению, используя эту систему, у меня есть несколько пустых каталогов с index.html, и я хотел бы удалить их, чтобы я мог распространять «чистый» пакет.

Каталоги, которые мне нужно удалить, следуйте по этому пути:

views
  `- {directoryName1}
      `- tmpl
         `- index.html
  `- {directoryName2}
   .... and son on ....

Только directoryName изменяется каждый раз, за ​​исключением того, что все остается тем же.
Я попытался с этой задачей муравья, но она не сработала:

<delete includeemptydirs="true">
    <fileset dir="${buildDir}/free">
       <exclude name="**/*" />
       <include name="**/tmpl/index.html"/>
    </fileset>
</delete>

любая помощь?

1 Ответ

2 голосов
/ 06 марта 2012

Вам нужна комбинация resourcecount и проверки условий.Я использую ant-contrib , но вы должны включить дополнительные банки.

<project name="blah" basedir="." default="conditionally.clean">
    <taskdef resource="net/sf/antcontrib/antlib.xml"/>
    <macrodef name="m.clean">
        <attribute name="dir.todelete"/>
        <sequential>
            <local name="count.files"/>
            <resourcecount property="count.files">
                <fileset dir="@{dir.todelete}">
                    <exclude name="index.html"/>
                </fileset>
            </resourcecount>

            <if>
                <equals arg1="${count.files}" arg2="0"/>
                <then>
                    <echo message="will delete dir @{dir.todelete}"  />
                </then>
                <else>
                       <echo message="will not delete dir @{dir.todelete}"  />
                </else>
            </if>

        </sequential>

    </macrodef>

    <target name="conditionally.clean">
        <m.clean dir.todelete="etc/demo2"/>
        <m.clean dir.todelete="etc/demo1"/>
    </target>

</project>

Вы можете создать «foreach» (требуется ant-contrib), чтобы получить все каталоги и вызывать выше макроса ...

(я думаю, пользовательская задача или встроенный скрипт может быть намного чище, чем build.xml ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...