Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ant: многомодульный проект, Как сделать это эффективно? 
V
    Опции темы
sandello
Дата 24.7.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Суть.
Есть проект, состоящий из некоторого количества модулей:

ProjectRoot/
ProjectRoot/moduleOne
ProjectRoot/moduleTwo
...
ProjectRoot/moduleNNN

В каждом из модулей есть свой build.xml
У самого проекта тоже есть build.xml, задача которого - сборка модулей в определенном порядке.

Текущая реализация - для каждого модуля используется свой таск "ant". Ущербность этого способа проявилась как только мне понадобилось не только собирать весь проект но и "чистить". Для этого в каждом build.xml определена цель "clean".
Но вот только не хочется делать еще одну кучу вызовов таска "ant", тем более, что все вызовы однотипные.

Есть варианты решения проблемы?




 


--------------------
user posted image
PM MAIL Jabber   Вверх
batigoal
Дата 24.7.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Можно написать таск, который будет сам пробегать по каталогам и запускать clean для каждого найденного build.xml.

Добавлено @ 15:25 
Выдрал из своего проекта. Видимо, будет что-то похожее:
Код

        <for param="file">
            <path>
                <fileset dir="${project.dir}" includes="build.xml"/>
            </path>
            <sequential>
                <antcall target="clean"> 
                    <param name="file" value="@{file}"/> 
                </antcall>
            </sequential> 
        </for>
 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
sandello
Дата 24.7.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



"for" - это task?
Я всю доку перерыл, искал циклы. Не нашел :-( Видимо совсем ослеп. 


--------------------
user posted image
PM MAIL Jabber   Вверх
batigoal
Дата 24.7.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



sandello, это не стандартный. По-моему, это из ant-contrib (http://ant-contrib.sourceforge.net).

 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
chief39
Дата 24.7.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 5
Всего: 77



Можно встроить джаваскрипт и в нём динамически запускать билды нужных модулей. Вернее, один и тот же билд для модуля, тольпо с параметрами модул1. модул2.... 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
sandello
Дата 25.7.2006, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Нарыл в доке task "subant", похоже придуман как раз для моих случаев 


--------------------
user posted image
PM MAIL Jabber   Вверх
sandello
Дата 25.7.2006, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Собственно, с помощью subant и macrodef решил проблему. По моему - просто и изящно :-)
Код

  <macrodef name="modules">
    <attribute name="target"/>
    <attribute name="dir"/>
    <attribute name="dist" default="dist"/>
    <attribute name="debug" default="false"/>
    <sequential>
      <subant target="@{target}">
        <fileset dir="@{dir}" includes="kernel/build.xml Dictionary/build.xml"/>
        <property name="module.out.dir" value="@{dist}"/>
        <property name="build.debug" value="@{debug}"/>
      </subant>
    </sequential>
  </macrodef>

  <target name="assembly" depends="init">
    <property name="build.target" value="assembly"/>

    <modules target="assembly" dist="${project.modules.dist}" dir="${project.modules.dir}"/>
    <copy todir="${project.dist}" flatten="true">
      <fileset dir="${project.modules.dir}" includes="*/${project.modules.dist}/*"/>
    </copy>
  </target>
 


--------------------
user posted image
PM MAIL Jabber   Вверх
chief39
Дата 25.7.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 5
Всего: 77



Можно и скриптом неплохо.
На всяк случай, если понадобится:

в ант встраиваешь:

Код

<script language="javascript"> <![CDATA[
            var modules = project.getProperty("modules.list");
            var modulesArr = modules.split(" ");
            for (i=0; i<modulesArr.length; i++)
            {
                if (modulesArr[i].length() > 0) {
                    echo = project.createTask("echo");
                    echo.setMessage("Trying to build module: " + modulesArr[i]);
                    buildModules.addTask(echo);

                    // Add ant task for each module
                    aCall = project.createTask("ant");
                    aCall.setAntfile("build-module.xml");
                    aCall.setTarget("compile");
                    aCall.setInheritAll(false);
                    p = aCall.createProperty();
                    p.setName("module.name");
                    p.setValue(modulesArr[i]);
                    buildModules.addTask(aCall);
                }
            }
        ]]> </script>



в проперти modules.list через пробел впихни список модулей.

build-module.xml единый билд для всех модулей, ведёт себя по разному в зависимости от параметра module.name(то есть для разных модулей).
Можно впихнуть и отдельные билды для каджого модуля.

в либы анта надо добавить bsf.jar и js.jar
первая - джакарта на апаче, вторая - не помню, в гугле уточнить можно.
 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Nobody
Дата 6.8.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 2
Всего: 16



А можно перейти на Maven и проблема исчезнет.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
sandello
Дата 8.8.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Думаю попробовать. Но пока нет времени разбираться в нем. С временем - вполне может быть :-)


--------------------
user posted image
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.