Как сохранить порядок файлов в Ant concat? - PullRequest
6 голосов
/ 02 мая 2011

Как сохранить порядок файлов в Ant concat?

Простой concat с набором файлов и includefile создает довольно «случайный» порядок, поскольку порядок не гарантируется:

<concat destfile="C:/targetdir/concatenated.file">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
</concat>

Что мне нужно, так это конкатенация в определенном порядке, чтобы файлы были перечислены во включаемом файле.

До сих пор я нашел список ресурсов , который должен сохранять порядок, но я не могу создать какой-либо составной файл с ним. : /

<concat destfile="C:/targetdir/concatenated.file">
    <resourcelist>
        <file file="C:/targetdir/includes.file"/>
        <filterchain>
            <striplinecomments>
                <comment value="#"/>
            </striplinecomments>
            <prefixlines prefix="C:/sourcedir/"/>
        </filterchain>
    </resourcelist>
</concat>

Кроме того, список ресурсов не может обрабатывать такие строки, как

LibraryX/A/Stuff/Morestuff/*

Вместо этого строка просто выдает «... / Morestuff / * не существует». -ошибка

Включает в файл список относительных путей:

LibraryX/A/Stuff/FileA.txt
LibraryX/A/Stuff/FileB.txt
LibraryX/A/Stuff/FileC.txt
LibraryX/A/Stuff/FileY.txt

Ответы [ 5 ]

13 голосов
/ 05 апреля 2012

Мне удалось довольно легко получить список файлов:

<concat destfile="C:/targetdir/concatenated.file">
    <filelist dir="C:/sourcedir/">
        <file name="i.txt" />
        <file name="n.txt" />

        <file name="o.txt" />
        <file name="r.txt" />
        <file name="d.txt" />
        <file name="e.txt" />
        <file name="r.txt" />
    </filelist>
</concat>

Надеюсь, это поможет!

6 голосов
/ 21 августа 2012

Если вы используете Ant 1.7+, вы можете использовать команду сортировки

   <concat destfile="C:/targetdir/concatenated.file">
        <sort>
            <fileset dir="C:/sourcedir/">   
                <include name="C:/targetdir/*.file" />                      
            </fileset>            
        </sort>            
   </concat>

Документацию по сортировке можно найти здесь

2 голосов
/ 10 июня 2011

[В Ant 1.8.2+] Вы также можете передать набор файлов через сортировку и отсортировать по имени файла, как показано ниже:

<concat destfile="./${dir.publish}/${dir.js}/b.main-${build.number}.debug.js">
     <sort xmlns:rcmp="antlib:org.apache.tools.ant.types.resources.comparators">
          <fileset dir="./${dir.publish}/">
              <include name="**/${dir.js.main}/**/*.js"/>
              <exclude name="**/${dir.js.main}/**/*.min.js"/>
          </fileset>
          <rcmp:name />
     </sort>
  </concat>

Пара вещей, на которые стоит обратить внимание:

  1. Каталоги сортируются перед файлами
  2. Прописные буквы ставятся перед строчными
0 голосов
/ 12 июня 2015

Помните, что XML по определению не зависит от порядка.

Чтобы объединить файлы в отсортированном порядке, рассмотрите возможность использования <replace>.

Создайте файл заказа, который определяет порядок,Затем в файле сборки:

  1. Скопируйте файл заказа в файл назначения с помощью <copy>
  2. Объедините ваши файлы во временный файл с помощью <concat>
  3. Загрузка файлов в свойства с помощью <loadfile>
  4. Вставка текста из этих файлов в файл назначения с помощью <replace>

Пример файла заказа order_file.txt :

    FILE_A_HERE
    CONCAT_FILES_HERE

Пример файла сборки ant build.xml :

    <copy file="order_file.txt" tofile="destination.txt" overwrite="yes">
    <concat destfile="tempfile.txt">
        <fileset dir="includes/">
            <include name="*.txt">
            <exclude name="fileA.txt">
        </fileset>
    </concat>
    <loadfile property="fileA" srcFile="includes/fileA.txt" />
    <loadfile property="concatFile" srcFile="tempfile.txt" />
    <replace file="destination.txt" token="FILE_A_HERE" value="fileA" />
    <replace file="destination.txt" token="CONCAT_FILES_HERE" value="concatFile" />
0 голосов
/ 02 августа 2011

попробуйте, поместите в алфавитном порядке

<project name="concatPath" default="full">
<target name="full">
    <fileset id="fs" dir="./files" />
    <pathconvert refid="fs" property="concatList" pathsep=";" targetos="unix"/>
    <echo>${concatList}</echo>
</target>
</project>

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

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