Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Ant , цикл и работа со списком директорий


Автор: nightguest 21.9.2006, 13:53
Мне тут на практике дали задание переписать существующий Ant bild.xml
Сейчас он работает так.
1. Загружает файл с фтп.
2. Конвертит его в базу данных.
3. Конвертит из БД дальше.
...
И этот скрипт запускается для каждой директории на фтп через .cmd файл

Названия директорий отличаются на одну - две буквы. И каждая содержит один файл , названия файлов тоже отличаются на те-же одну - две буквы.
Например
c:\xABCyz\xABC100yz.rar
c:\xABCy\xABC100y.rar
и т.д.

меня просят переписат этот скрипт так, что-бы он сначала скачивал все файлы, затем их все конвертировал ...

Так вот вопрос. Можно-ли в Ant организовать что-то типа цикла?
То есть создать массив с именами директорий, и запустить ftp-task для каждой по очереди? Или нужно писать свой task для этого? А то мне кажется что для каждой директории свой ftp-task создавать будет не очень красиво.

Просто Ant изучаю второй день и пока не очень разобрался с какой стороны подойти.
Спасибо за помощь!

Автор: batigoal 21.9.2006, 15:48
Цитата(nightguest @  21.9.2006,  14:53 Найти цитируемый пост)
Так вот вопрос. Можно-ли в Ant организовать что-то типа цикла?
То есть создать массив с именами директорий, и запустить ftp-task для каждой по очереди? 

Если все каталоги лежат в одном месте, то можно просто пробегаться по нему, и запускать таск для каждого каталога.
Вот кусок моего рабочего кода, который бегает по каталогу и запускает утилиту wrap для всех файлов, находящихся в нем:
Код

    <!-- Wraps the ${sql.file} file with Oracle 9 wrapper -->
    <target name="_wrap">
        <basename property="file.filename" file="${file}"/>
        <delete file="${sql.wrap.dir}/${file.filename}"/>
        <exec executable="${wrap.dir}/wrap.exe">
         <arg value="iname=${sql.source.dir}/${file.filename}" />
            <arg value="oname=${sql.wrap.dir}/${file.filename}"/>
        </exec>
    </target>
    
    <!-- Wraps the ${sql.file} file with Oracle 9 wrapper -->
    <target name="wrap_one" description="Wrap one source sql file">
        <antcall target="_wrap"> 
            <param name="file" value="${sql.file}"/> 
        </antcall>
    </target>
    
    <!-- Wraps all the files in ${sql.source.dir} folder with Oracle 9 wrapper -->
    <target name="wrap_all" description="Wrap all source sql files">
        <delete dir="${sql.wrap.dir}"/>
        <mkdir dir="${sql.wrap.dir}"/>
        <for param="file">
            <path>
                <fileset dir="${sql.source.dir}" includes="*"/>
            </path>
            <sequential>
                <antcall target="_wrap"> 
                    <param name="file" value="@{file}"/> 
                </antcall>
            </sequential> 
        </for>
    </target>

Попробуй разобраться.

Добавлено @ 15:48 
Цитата(nightguest @  21.9.2006,  14:53 Найти цитируемый пост)

Так вот вопрос. Можно-ли в Ant организовать что-то типа цикла?

У меня для этого задействован таск for из сторонней библиотеки тасков ant-contrib.

Автор: nightguest 21.9.2006, 15:53
Спасибо! Сейчас буду пробовать, каталоги все в одном месте, но там есть и лишние, и те что пока не нужны , но могут потребоватся.

Автор: chief39 21.9.2006, 19:12
Всунь джарик джаваскрипта и БСФ
js.jar и bsf.jar
в класспас.
И ворочай скриптом по щучьему веленью smile

Или ещё каким скриптовым 

Автор: batigoal 22.9.2006, 08:25
Цитата(nightguest @  21.9.2006,  16:53 Найти цитируемый пост)
Спасибо! Сейчас буду пробовать, каталоги все в одном месте, но там есть и лишние, и те что пока не нужны , но могут потребоватся.

Это можно подрегулировать fileset'ом.

Автор: nightguest 22.9.2006, 12:47
Еше вопросик. Я тут чужой код разбирать начал и не понимаю одну вещь.

Код

<target name="jatodb-uncompress-SSC" if="with.jatodb-import" unless="exclude.jatodist-SSC" depends="jatodb-download">
        <exec executable="${bin.dir}/unrar/rar_static"
              dir="${jatodb.dir}"
              os="Linux"
              failonerror="true">
            <arg value="x"/>      <!-- eXtract -->
            <arg value="-o+"/>    <!-- Overwrite -->
            <arg value="-inul"/>  <!-- disable all messages -->
            <arg value="SSC${jato.dist}/SSC${jato.dist}_CS2002_TextFiles_UTF8.exe"/>
        </exec>
        <exec executable="${bin.dir}/unrar/UnRAR.exe"
              dir="${jatodb.dir}"
              os="Windows XP"
              failonerror="true">
            <arg value="x"/>      <!-- eXtract -->
            <arg value="-o+"/>    <!-- Overwrite -->
            <arg value="-inul"/>  <!-- disable all messages -->
            <arg value="SSC${jato.dist}\\SSC${jato.dist}_CS2002_TextFiles_UTF8.exe"/>
        </exec>
        <exec executable="${bin.dir}/unrar/UnRAR.exe"
              dir="${jatodb.dir}"
              os="Windows 2000"
              failonerror="true">
            <arg value="x"/>      <!-- eXtract -->
            <arg value="-o+"/>    <!-- Overwrite -->
            <arg value="-inul"/>  <!-- disable all messages -->
            <arg value="SSC${jato.dist}\\SSC${jato.dist}_CS2002_TextFiles_UTF8.exe"/>
        </exec>
    </target>


Здесь происходит вызов соответствующего системе архиватора. Тк ${bin.dir} y меня всегда равна Windows XP-x86 то Linux не запустится, но ведь у Windows XP и Windows 2000 один и тот-же winrar.exe то запуск пройдет 2 раза?

или os="Windows XP" к примеру в 13 строке определяет что будет запушено?

Sorry. Уже разобрался. Как можно удалить этот пост?

Автор: batigoal 22.9.2006, 13:17
Цитата(nightguest @  22.9.2006,  13:47 Найти цитируемый пост)
Sorry. Уже разобрался. Как можно удалить этот пост?

Новичку, по-моему, никак. Это возможно только после какого-то количства постов (50, или 100, или 200 - не помню).

На будущее: разные вопросы лучше выделять в разные темы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)