Что такое программное обеспечение для автоматизации сборки (например, Ant)?

Я часто вижу ссылки на муравья, но я не понимаю, что именно он должен делать? из того, что я слышал, он должен компилировать ваши проекты, но я не могу просто сделать это, нажав «Выполнить» -> «Выполнить» в eclipse?

Изменить: я думаю, я должен перефразировать свой вопрос. Я уже знаю, что ant — это «программное обеспечение для автоматизации сборки», мой вопрос: что такое автоматизация сборки? Я думал, что вы должны протестировать свое приложение, и когда оно запущено, вы нажимаете кнопку «сборка» в eclipse или через java из командной строки, и из него создается файл .jar? Так зачем же нужно «автоматизировать» этот процесс?


person Ali    schedule 04.03.2009    source источник
comment
Изменен заголовок, так как Click Upvote, кажется, больше ищет информацию об автоматизации сборки в целом, а не о Ant в частности.   -  person Dana    schedule 04.03.2009
comment
@Dana: То, как вы меняете название, делает это совершенно другим вопросом. Это не отражает первоначальное намерение Click Upvote.   -  person OscarRyz    schedule 04.03.2009
comment
Ну, я думаю, это отражает его намерения, но если нет, он всегда может вернуться.   -  person Dana    schedule 05.03.2009
comment
Может, что-то среднее?   -  person OscarRyz    schedule 05.03.2009
comment
способ пройтись по моему редактированию. Это нормально :) Ура!   -  person OscarRyz    schedule 05.03.2009
comment
Мне нравится измененное название, это именно то, что я имел в виду   -  person Ali    schedule 05.03.2009


Ответы (12)


Я уже знаю, что ant – это "программное обеспечение для автоматизации сборки". У меня вопрос: что такое автоматизация сборки? Я думал, что вы должны протестировать свое приложение, и когда оно запущено, вы нажимаете кнопку «сборка» в eclipse или через java из командной строки, и из него создается файл .jar? Так зачем же нужно «автоматизировать» этот процесс?

Не все Java-разработки выполняются с помощью eclipse, и не все jar-файлы могут быть созданы из командной строки (или должны быть созданы из командной строки).

Вам может понадобиться дополнительно запустить тест-кейсы, модульные тесты и многие-многие другие процессы.

Что делает муравей, так это предоставляет механизм для автоматизации всей этой работы (чтобы вам не приходилось делать это каждый раз), и, возможно, вы можете запускать этот муравьиный скрипт каждый день в 18:00.

Например, в некоторых проектах требуется ежедневная сборка, ниже приведены задачи, которые можно автоматизировать с помощью ant, чтобы они могли выполняться без вмешательства человека.

  • Подключиться к серверу Subversion.
  • Скачать/обновить до последней версии
  • Скомпилируйте приложение
  • Запустите тестовые случаи
  • Упакуйте приложение (в банку, войну, ухо или что-то еще)
  • Зафиксируйте двоичные файлы этой сборки в subversion.
  • Установите приложение на удаленный сервер
  • Перезагрузите сервер
  • Отправьте электронное письмо с резюме работы.

Конечно, для других проектов это излишество, но для некоторых очень полезно.

person OscarRyz    schedule 04.03.2009

rogeriopvl абсолютно правильно, но чтобы ответить на ваш " разве я не могу просто сделать это, нажав «Выполнить» -> «Выполнить в Eclipse»?» вопрос: это нормально для проекта, над которым вы работаете самостоятельно, и вам не нужна повторяемая сборка с поддержкой сценариев в нескольких средах.

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

person Jon Skeet    schedule 04.03.2009
comment
Расширяя это немного. Если вы не являетесь разработчиком-одиночкой, сборка производственной сборки в вашей среде IDE — плохая идея. У кого-то в другой системе могут быть другие PATH, jar-файлы, версии и т. д. Ant предоставляет независимую от системы сборку, часто включающую такие вещи, как модульные тесты, маркировку исходного кода и т. д. - person Chris Kessel; 04.03.2009

Ant используется для автоматизации процесса сборки, но процесс сборки часто представляет собой гораздо больше, чем просто компиляцию. У Ant есть «задачи», которые можно использовать для выполнения различных полезных функций. Вы можете создать свою собственную задачу, чтобы делать что угодно, написав класс Java и сообщив муравью, где его найти. Затем вы можете смешивать и сопоставлять эти задачи, чтобы создать цели, которые будут выполнять набор задач.

Вы также можете настроить динамическую среду для создания своего приложения. Вы можете настроить файлы свойств для хранения переменных, которые можно использовать в процессе сборки, т. е. для хранения путей к файлам, путей к классам и т. д. Это полезно, например, для различения тестовых и производственных сборок, где пути развертывания, экземпляры базы данных и т. д. может измениться. Ant также включает в себя управление потоком (если и т. д.)

Некоторые вещи, которые я видел, как делают муравьи:

  • Скомпилировать код
  • Используйте контроль версий, чтобы проверить последнюю версию или пометить создаваемую версию.
  • Запуск сценариев sql для создания или перестроения тестовой базы данных
  • Скопируйте файлы с внешнего ресурса для включения в проект
  • Объедините код в файл jar, war или ear.
  • Развертывание веб-приложения на сервере приложений
  • Перезапустите сервер приложений
  • Выполнить набор тестов
  • Статический анализ, т. е. CheckStyle или PMD
  • Отправьте электронное письмо команде, чтобы предупредить их о сборке.
  • Generate files based on information from the build.
    • Example: I have a jsp in my app that does nothing but display version/build information. It is generated by ant when I run a build, and the production operations team checks this page when they deploy the application to make sure they've deployed the correct build.
person mtruesdell    schedule 04.03.2009

Во многих крупных компаниях (и, вероятно, в некоторых небольших) производственный код разрабатывается не теми, кто его разработал. Вместо этого разработчики могут проверить свой код в репозитории исходного кода и пометить его. Затем они передают этот тег сборной команде.

Команда сборки в отдельной (чистой) области — возможно, на каком-то безголовом сервере (то есть без графического интерфейса) — затем проверит код и запустит скрипт сборки. Сценарий сборки будет полностью независим от среды рабочего стола/IDE.

Это гарантирует, что ничто из того, что находится на компьютере любого разработчика, не «загрязняет» сборку. (Или, что более вероятно, для работы системы не требуется ничего внешнего контроля версий!)

Таким образом, большая часть используемого вами программного обеспечения никогда, никогда не будет создана на компьютере разработчика.

PS. Вы также можете рассмотреть идею непрерывной интеграции.

person oxbow_lakes    schedule 04.03.2009
comment
этот ответ очень полезен. Когда я читаю этот ответ, у меня возникает вопрос. - person muneeb_ahmed; 17.02.2018
comment
как разработчик Java, я не хочу использовать какие-либо инструменты автоматизации сборки (например, ant, maven или gradle) для своих проектов. Итак, какой язык программирования я должен изучить для создания инструмента автоматизации? - person muneeb_ahmed; 17.02.2018

Короткий ответ заключается в том, что Ant — это отличный способ создать полную сборку проекта, независимую от какого-либо конкретного инструмента, который может использовать любой разработчик. Без независимой сборки все может быстро пойти наперекосяк, особенно для больших проектных групп.

А теперь к длинному ответу... Меня завели в несколько проектов без всякого смысла самостоятельной сборки. В одном проекте был один парень, который не был разработчиком, которому было поручено создавать и развертывать программное обеспечение. Он создал 147 отдельных пакетных файлов Windows для компиляции каждого компонента EJB, каждого сервлета и каждого клиентского компонента. Для этой сборки не было проверки ошибок. Все сообщения журнала, включая сообщения об ошибках, были выведены на стандартный вывод. Он должен был вручную распознать, прочитав этот журнал, какое исключение или напечатанное сообщение было нормальным, а какое сообщение было ошибкой. Ему также пришлось развернуть это программное обеспечение, которое он только что создал. Развертывание было таким же сложным, поскольку было несколько уровней с балансировкой нагрузки. Каждый модуль нужно было разместить в нужном месте вручную с настройкой параметров, чтобы они соответствовали нисходящему и восходящему уровням. Создание и развертывание этого программного обеспечения заняло у него не менее 3 дней с использованием этого метода. Конечно, только тогда кто-нибудь мог определить, «работала» ли сборка. Обычно по истечении этого периода все программисты брались за отладку сборки. Программисты сказали бы, что мой модуль отлично работает в моей среде IDE. Я просто нажимаю бежать вот так, понимаете?

Действительно, отдельные программные модули обычно работали, но сборка и развертывание были ужасно неэффективны. И что не менее плохо, развернуть сборку более чем в одной среде было столь же сложно для всех. Менеджмент сказал бы: хорошо, теперь эта сборка работает в нашей среде регрессионного тестирования. Теперь разверните ту же сборку в другой среде, чтобы продавцы могли продемонстрировать готовое программное обеспечение. Это должно быть просто сделать, но это также заняло не менее 2 дней, после чего последовал период «отладки сборки». Сборки и развертывания никогда не были простыми и никогда не были точными. Это сильно замедлило проект.

В любом случае, мы заменили всю эту процедуру полным механизмом сборки и развертывания на основе Ant. Конечным результатом стало то, что полную сборку можно было создать и развернуть менее чем за 30 минут в полностью автоматическом режиме. QA-парень, управляющий сборками и развертываниями, может вести доску с информацией о том, в какой среде какая сборка развернута и какая группа использует эту среду. Это было то, что было просто невозможно со старой системой.

person Gary    schedule 04.03.2009

Ant предназначен для автоматизации процессов сборки программного обеспечения:

http://en.wikipedia.org/wiki/Apache_Ant

person rogeriopvl    schedule 04.03.2009
comment
Я ненавижу, когда кто-то публикует ссылку на ответ в Википедии. Ты думаешь, я бы не проверил это еще до того, как написал сюда? - person Ali; 04.03.2009
comment
@Click: Не обязательно - в вашем исходном вопросе определенно не было доказательств этого. Ответ на вопрос, указанный в заголовке, заключается в автоматизации процессов сборки. Учитывая, что нажатие кнопки не является автоматизацией, я не понимаю, чем этот ответ вообще плох. - person Jon Skeet; 04.03.2009
comment
@Click Upvote: Небольшой сюрприз, но я согласен с @Jon Skeet; ваш вопрос был ошибочным и показал все признаки того, что вы не проводили даже фундаментальных исследований по этому вопросу. @regoeriopvl определенно не заслуживает оскорбительного флага за его лаконичный и точный ответ. - person Randolpho; 04.03.2009
comment
@ClickUpvote: не груби. Если вы задаете вопрос, это означает, что информации, которой вы владеете, недостаточно. Как узнать, каково ваше базовое знание. Если вы прочитали catb.org/~esr/faqs/smart-questions. html, вы должны были знать, что нужно указать в вопросе то, что вы пробовали. - person Sunny Milenov; 04.03.2009
comment
Я перефразировал свой вопрос, чтобы лучше объяснить то, что я хотел знать. - person Ali; 04.03.2009
comment
@ Джон Скит, если вы еще раз прочитаете основную часть вопроса, я специально сказал, что много слышал о муравьях, но я не понимаю, что именно это означает. Если вы затем ответите чем-то, что я уже слышал 500 раз, не зная, что это значит, для меня это оскорбительно - person Ali; 04.03.2009
comment
@Click: Вы сказали, что будете часто видеть [n] ссылки на Ant, что не то же самое, что знать, что это инструмент автоматизации сборки. Вы сказали, что знали, что он компилирует проект, но сборка — это нечто большее, чем компиляция. Если вы недостаточно хорошо объясните свой вопрос, это ваша вина, а не ответивших. - person Jon Skeet; 04.03.2009
comment
В частности, если бы вы прочитали статью в Википедии полностью, у вас было бы гораздо лучшее представление о том, о чем она, чем предполагал ваш вопрос. - person Jon Skeet; 04.03.2009
comment
Я согласен с Click Upvote здесь, запись в Википедии не очень понятна, если вы еще не знаете, что это такое. Посмотрите на начальный абзац; там нет реальной информации, кроме сравнения с «сделать». Теперь ссылка на запись Build Automation в Википедии действительно полезна. - person Outlaw Programmer; 05.03.2009
comment
Это также первая ссылка в разделе «Смотрите также»… не так уж сложно найти, если вы действительно заинтересованы. - person Jon Skeet; 05.03.2009

Ant позволяет создавать CRISP (полные, воспроизводимые, информативные, планируемые, переносимые). Вы можете найти полезную информацию об этом в этой презентации Майка Кларка и в его книга, Pragmatic Project Automation.

person Fabian Steeg    schedule 04.03.2009

Ant — это инструмент сборки, похожий на make-файлы (хотя и с совершенно другим синтаксисом в XML). Если вы используете только Eclipse, можно придерживаться этого, и вы всегда можете преобразовать файл сборки Ant в проект Eclipse (тогда конфигурации запуска Eclipse, если я правильно помню, эквивалентны целям сборки Ant).

Если вы хотите развернуть исходный код приложения и позволить другим легко создавать или настраивать его, автоматизация этого с помощью Ant, вероятно, будет неплохой идеей. Но это, как правило, непоследовательный опыт для пользователей, или, по крайней мере, я не видел большого консенсуса в отношении того, какие цели должны быть там и что делать до сих пор.

Ant также можно использовать для обычных автоматических сборок (вы же не хотите нажимать Run in Eclipse каждую ночь, верно? :-))

person Joey    schedule 04.03.2009

Если кто-то рядом с вами, я думаю, вы получите много полезного от CITCON, конференции по непрерывной интеграции и тестированию. Вы можете поговорить с большим количеством людей о преимуществах автоматизации при создании и тестировании программного обеспечения.

В основном люди используют Ant (вместе с другими инструментами), чтобы автоматизировать все, что они хотят, чтобы произошло после коммита. Основные преимущества такой автоматизации быстрее, качественнее и дешевле.

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

Лучше, потому что компьютеры действительно очень хорошо делают одно и то же каждый раз одним и тем же способом. (Люди склонны сосать это.)

Дешевле, потому что у вас меньше ошибок, а возникающие ошибки выявляются быстрее и, следовательно, их исправление обходится дешевле.

person Jeffrey Fredrick    schedule 04.03.2009

Вы также имеете в виду «Экспорт файла сборки ant ".

Если вы пишете свой собственный сценарий Ant для создания своего приложения вне eclipse, вы можете написать свои собственные цели, которые используют задача Ant для делегирования сгенерированному файлу build.xml.

Кроме того, вы можете настроить конструкторы проекта (project properties » Builders) для запуска любого скрипта (муравья или другого), который вы хотите, при сборке проекта вручную или автоматически.

person VonC    schedule 04.03.2009

У Джоэла (Спольского) есть отличная статья о тесте Джоэла. Многие из них вращаются вокруг способности делать важные вещи часто, быстро и надежно. Одной из таких вещей является ваша сборка.

person Jared    schedule 04.03.2009

Eclipse использует ant для сборки, запуска, развертывания,...

«Ant — это инструмент сборки на основе Java. Теоретически он чем-то похож на Make, но без изъянов Make и с полной переносимостью чистого Java-кода». (из текста ссылки

person Dutow    schedule 04.03.2009
comment
Eclipse не использует ant для большинства задач. Netbeans использует ant для всего. - person Joachim Sauer; 04.03.2009