2010-04-28 3 views
0

Я структура папок, содержащую несколько файлов JavaScript, каждому из этих файлов нужна стандартный кусок текста в верхнем = // @ включают «includes.js»Сформировать MetaData с Ant

Каждой папке должна содержать файл с именем includes.js, который содержит запись включения для каждого файла в своем каталоге и запись для включенного файла в родительский каталог.

Я пытаюсь достичь этого с помощью муравья, и это не слишком хорошо. До сих пор у меня есть следующее, что делает работу с вставкой заголовка, но не без фактического перемещения или копирования файла. Я слышал, что люди говорили о задаче <replace>, но я немного в тупике.

<?xml version="1.0" encoding="UTF-8"?> 

<project name="JavaContentAssist" default="start" basedir="."> 

    <taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
     <classpath> 
     <pathelement location="C:/dr_workspaces/Maven Repository/.m2/repository/ant-contrib/ant-contrib/20020829/ant-contrib-20020829.jar"/> 
     </classpath> 
    </taskdef> 

    <target name="start"> 

     <foreach target="strip" param="file"> 

      <fileset dir="${basedir}"> 
       <include name="**/*.js"/> 
       <exclude name="**/includes.js"/> 
      </fileset> 

     </foreach> 

    </target> 

    <target name="strip"> 

     <move file="${file}" tofile="${a_location}" overwrite="true"> 

      <filterchain> 
       <striplinecomments> 
        <comment value="//@" /> 
       </striplinecomments> 
       <concatfilter prepend="${basedir}/header.txt"> 
       </concatfilter> 
      </filterchain> 
     </move> 


    </target> 

</project> 

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

ответ

1

Это, кажется, удовлетворяет описание проблемы:

<project default="addincludes"> 
    <taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
     <pathelement location="ant-contrib/ant-contrib-1.0b3.jar"/> 
    </classpath> 
    </taskdef> 

    <target name="addincludes"> 
    <foreach target="perdir" param="dir"> 
     <path> 
     <dirset dir="src" includes="**"/> 
     </path> 
    </foreach> 
    </target> 

    <target name="perdir"> 
    <echo file="${dir}/includes.js">//@include "../includes.js"&#10;</echo> 
    <foreach target="perfile" param="file"> 
     <path> 
     <fileset dir="${dir}" includes="*.js" excludes="includes.js"/> 
     </path> 
    </foreach> 
    </target> 

    <target name="perfile"> 
    <basename property="basename" file="${file}"/> 
    <echo file="${dir}/includes.js" append="true">//@include "${basename}"&#10;</echo> 
    <move file="${file}" tofile="${file}.tmp" overwrite="true"> 
     <filterchain> 
     <striplinecomments> 
      <comment value="//@" /> 
     </striplinecomments> 
     <concatfilter prepend="header.txt"/> 
     </filterchain> 
    </move> 
    <move file="${file}.tmp" tofile="${file}" overwrite="true"/> 
    </target> 
</project>