Муравей против Maven против Gradle

Ant Vs Maven Vs Gradle



Во время разработки программного обеспечения разработчикам приходится перестраивать один и тот же код снова и снова. Они часто пытаются использовать сценарии bash или другие языки сценариев для автоматизации задачи. Однако есть инструменты сборки, которые больше подходят для автоматизации сборки. Преобладающие инструменты сборки:

Давайте исследуем инструменты, чтобы узнать больше.







Муравей Apache с плющом

Apache Ant - это инструмент командной строки на основе Java, который использует файлы XML для определения сценариев сборки. Он в основном используется для сборок Java, но его также можно использовать для разработки на C / C ++. Встроенные задачи предоставляют способы компилировать, собирать, тестировать и запускать программные приложения. Пользователи также могут создавать свои собственные библиотеки antlib для улучшения функциональности Ant. Apache Ivy - это инструмент управления зависимостями, который легко интегрируется с Ant для создания более надежной экосистемы. Разработка Ant началась в 2000 году.



Плюсы



  • Лучший контроль над общим процессом сборки
  • Достаточно гибок, чтобы работать с любым рабочим процессом

Минусы





  • Файлы сборки на основе XML могут увеличиваться в размерах и становиться недоступными для обслуживания.
  • Для поддержки сценариев сборки необходимо много времени и ресурсов.
  • Интеграция IDE затруднена

Пример муравья с плющом

Вы можете установить последнюю версию Ant из здесь . Вы должны загрузить zip, развернуть и поместить папку bin на свой путь. Вы можете использовать следующую команду, чтобы проверить, правильно ли установлен Ant:

$ ant-версия
Apache Ant(TM)версия 1.10.1 скомпилирована в феврале2 2017 г.

После установки Ant вы можете загрузить последнюю версию Ivy jar и поместить ее в папку lib внутри каталога Ant.



После установки Ant создайте папки helloworld и helloworld / src. Внутри папки src поместите файл helloworld.java с кодом:

/ **************************

Распечатывает 'Hello World!'

*************************** /

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

общественный статический пустотаглавный( Нить []аргументы) {
Система .из.println('Привет, мир!');
}

}

Теперь в папке helloworld создайте файл build.xml со следующим кодом:

xmlns: плющзнак равно'antlib: org.apache.ivy.ant' имязнак равно'Привет, мир' дефолтзнак равно'банка'>

имязнак равно'src.dir' ценитьзнак равно'src'/>
имязнак равно'build.dir' ценитьзнак равно'строить'/>
имязнак равно'classes.dir' ценитьзнак равно'$ {build.dir} / classes'/>
имязнак равно'am.dir' ценитьзнак равно'$ {build.dir} / bin'/>
имязнак равно'lib.dir' ценитьзнак равно'lib' />
я бызнак равно'lib.path.id'>
тебезнак равно'$ {lib.dir}' />
>

имязнак равно'решать'>
/>
>

имязнак равно'чистый'>
тебезнак равно'$ {build.dir}'/>
>

имязнак равно'компилировать' зависит отзнак равно'решать'>
тебезнак равно'$ {classes.dir}'/>
srcdirзнак равно'$ {src.dir}' destdirзнак равно'$ {classes.dir}' classpathrefзнак равно'lib.path.id'/>
>

имязнак равно'банка' зависит отзнак равно'компилировать'>
тебезнак равно'$ {bin.dir}'/>
destfileзнак равно'$ {bin.dir} / $ {ant.project.name} .jar' на основезнак равно'$ {classes.dir}'/>
>

>

И в той же папке helloworld создайте файл ivy.xml со следующим кодом:

версиязнак равно«2.0»>
организациязнак равно'org.apache' модульзнак равно'Привет, мир'/>
>
orgзнак равно'юнит' имязнак равно'юнит' revзнак равно'4.12'/>
>
>

Структура каталогов должна выглядеть так:

Привет, мир
| - build.xml
| - ivy.xml
`- src
`- helloworld.java

Теперь вы можете запустить сборку с помощью команды:

$муравейбанка

Успешная сборка должна дать следующий результат:

$ муравейник
Файл сборки: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

решать:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: настройки загрузки :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[ivy: retrieve] :: разрешение зависимостей :: org.apache # helloworld; [электронная почта защищена]
MacBook-Air.local
[ivy: retrieve] confs: [по умолчанию]
[ivy: retrieve] обнаружен junit # junit; 4.12 публично
[ivy: retrieve] обнаружен публично org.hamcrest # hamcrest-core; 1.3.
[ivy: retrieve] :: отчет о разрешении :: разрешение 397 мс :: артефакты дл 15 мс
-------------------------------------------------- -------------------
| | модули || артефакты |
| conf | номер | поиск | dwnlded | выселен || номер | dwnlded |
-------------------------------------------------- -------------------
| по умолчанию | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: retrieve] :: retrieving :: org.apache # helloworld
[ivy: retrieve] confs: [по умолчанию]
[ivy: retrieve] 0 артефактов скопировано, 4 уже извлечено (0 КБ / 39 мс)

компилировать:
[mkdir] Созданный каталог: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
классы
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: предупреждение:
'includeantruntime' не установлено, по умолчанию build.sysclasspath = last; установить на ложь
для повторяемых сборок
[javac] Компиляция 1 исходного файла в / Users / zak / _work / LearnBuildScripts / LearnANT /
helloworld / сборка / классы

банка:
[mkdir] Создан каталог: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Сборка jar: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
helloworld.jar

СТРОИТЬ УСПЕШНО
Общее время: 6 секунд

Вы можете попробовать файл jar следующим образом:

$ java -cp build / bin / helloworld.банкаПривет, мир
Привет, мир!

Мы определили, что файл jar будет помещен в папку build / bin. Папки создаются во время сборки. Команда ant jar вызывает цель jar в build.xml.

Maven

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

Он также представил загрузку зависимостей, которая упростила разработку. До появления Ivy в Ant пользователям приходилось управлять зависимостями локально. Maven первым принял философию управления зависимостями.

Однако строгие стандарты Mavens затрудняют написание собственных сценариев сборки. С инструментом легко работать, если проект соответствует строгим стандартам.

Плюсы

  • Автоматическая загрузка зависимостей
  • Все зависимости автоматически записываются в систему управления версиями как часть скриптов Maven.
  • Стандартизирует и упрощает процесс сборки
  • Легко интегрируется с IDE и системами CI / CD

Минусы

  • Не гибок в создании настраиваемых рабочих процессов
  • Крутая кривая обучения, и этот процесс трудно понять новичкам
  • Требуется много времени для решения проблем сборки и интеграции новых библиотек
  • Не годится для нескольких версий одной и той же зависимости

Пример Maven

Вы можете скачать последнюю версию Maven из здесь . Проверить установку можно так:

$ mvn --version
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017 г.-10-18T00:58:13-07: 00)
Домашняя страница Maven: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Версия Java: 1.8.0_74, поставщик: Oracle Corporation
Домашняя страница Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/ Содержание / Главная / jre
Локаль по умолчанию: en_US, кодировка платформы: UTF-8
Название ОС:'Mac OS X', версия:'10 .11,6 ', арка:'x86_64', семья:'макинтош'

Создайте папку helloworld и сгенерируйте проект с помощью следующей команды:

Архетип $ mvn: сгенерировать -DgroupId = com.Название компании.Привет, мир-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =ложный

Он должен создать структуру папок и сгенерировать вывод, который выглядит следующим образом:

[ИНФОРМАЦИЯ] Поиск проектов ...
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[INFO] Сборка проекта Maven Stub (без POM) 1
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] >>> maven-archetype-plugin: 3.0.0: generate (default-cli)> generate-sources
@ standalone-pom >>>
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ автономный-pom<<<
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-archetype-plugin: 3.0.0: generate (default-cli) @ standalone-pom ---
[INFO] Создание проекта в пакетном режиме
[ИНФОРМАЦИЯ] ----------------------------------------------- -----------------------------
[ИНФОРМАЦИЯ] Использование следующих параметров для создания проекта из Старого (1.x) архетипа:
maven-archetype-quickstart: 1.0
[ИНФОРМАЦИЯ] ----------------------------------------------- -----------------------------
[INFO] Параметр: basedir, Значение: / Users / zak / _work / LearnBuildScripts / LearnMaven
[ИНФОРМАЦИЯ] Параметр: package, Значение: com.companyname.helloworld
[ИНФОРМАЦИЯ] Параметр: groupId, значение: com.companyname.helloworld
[ИНФОРМАЦИЯ] Параметр: artifactId, значение: helloworld
[ИНФОРМАЦИЯ] Параметр: packageName, Значение: com.companyname.helloworld
[INFO] Параметр: версия, значение: 1.0-SNAPSHOT
[INFO] проект создан из старого (1.x) архетипа в каталоге: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ] СОЗДАТЬ УСПЕХ
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ] Общее время: 8.602 с.
[ИНФОРМАЦИЯ] Окончание: 2018-01-27T00: 05: 37-08: 00
[ИНФОРМАЦИЯ] Конечная память: 15M / 152M
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------

Структура папок должна выглядеть так:

Привет, мир
|-- pom.xml
``- src
|-- главный
| ``-Джава
| ``-- с участием
| ``-- Название компании
| ``-- Привет, мир
| ``- App.java
``-тестовое задание
``-Джава
``-- с участием
``-- Название компании
``-- Привет, мир
``- AppTest.java

Pom.xml содержит конфигурации сборки. Внутри pom.xml код выглядит так:

xmlnsзнак равно'http://maven.apache.org/POM/4.0.0' xmlns: xsiзнак равно'http://www.w3.org/2001/
XMLSchema-instance '
xsi: schemaLocationзнак равно'http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.companyname.helloworld>
>Привет, мир>
>банка>
>1.0-SNAPSHOT>
>Привет, мир>
>http://maven.apache.org>
>
>
>Junit>
>Junit>
>3.8.1>
>тестовое задание>
>
>
>

Вы можете создать файл jar, используя следующую команду:

пакет $ mvn

[ИНФОРМАЦИЯ] Поиск проектов ...
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ] Сборка helloworld 1.0-SNAPSHOT
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-resources-plugin: 2.6: ресурсы (ресурсы по умолчанию) @ helloworld ---
[ПРЕДУПРЕЖДЕНИЕ] Использование кодировки платформы (на самом деле UTF-8) для копирования отфильтрованных ресурсов, т. Е.
сборка зависит от платформы!
[INFO] пропустить несуществующий ресурсDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / SRC / основные / ресурсы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-compiler-plugin: 3.1: компиляция (компиляция по умолчанию) @ helloworld ---
[ИНФОРМАЦИЯ] Обнаружены изменения - перекомпиляция модуля!
[ВНИМАНИЕ] Не задана кодировка файла, используется кодировка платформы UTF-8, т.е. сборка
зависит от платформы!
[INFO] Компиляция 1 исходного файла в / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / цель / классы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- плагин-ресурсы-maven: 2.6: testResources (default-testResources) @
Привет, мир ---
[ПРЕДУПРЕЖДЕНИЕ] Использование кодировки платформы (на самом деле UTF-8) для копирования отфильтрованных ресурсов, т. Е.
сборка зависит от платформы!
[INFO] пропустить несуществующий ресурсDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / SRC / тест / ресурсы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[ИНФОРМАЦИЯ] Обнаружены изменения - перекомпиляция модуля!
[ВНИМАНИЕ] Не задана кодировка файла, используется кодировка платформы UTF-8, т.е. сборка
зависит от платформы!
[INFO] Компиляция 1 исходного файла в / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-классы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-surefire-plugin: 2.12.4: test (default-test) @ helloworld ---
[ИНФОРМАЦИЯ] Каталог отчетов Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
надежные отчеты

-------------------------------------------------- -----
Т Е С Т С
-------------------------------------------------- -----
Запуск com.companyname.helloworld.AppTest
Выполненные тесты: 1, Ошибки: 0, Ошибки: 0, Пропущено: 0, Истекшее время: 0,014 сек.

Полученные результаты :

Выполненных тестов: 1, сбоев: 0, ошибок: 0, пропущенных: 0

[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[ИНФОРМАЦИЯ] Сборка файла jar: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.jar
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ] СОЗДАТЬ УСПЕХ
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ] Общее время: 5,624 с
[ИНФОРМАЦИЯ] Окончание: 2018-01-27T00: 11: 10-08: 00
[ИНФОРМАЦИЯ] Конечная память: 16M / 114M
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------

Вы можете запустить файл jar следующим образом:

$ java -cp target / helloworld-1.0-SNAPSHOT.банкас участием.Название компании.Привет, мир.Приложение
Привет, мир!

Файл jar помещается в целевую папку.

Gradle

Gradle сочетает в себе мощь Ant и Maven. Первая версия Gradle была выпущена в 2012 году. Она быстро получила распространение. В настоящее время Google использует его для ОС Android.

Вместо XML в Gradle используется язык Groovy. В результате сценарии сборки в Gradle легче писать и читать. Первоначально он использовал Ivy для управления зависимостями, но теперь он использует собственный механизм зависимостей.

Плюсы

  • Обеспечивает стандартизацию при сохранении гибкости
  • Легко читать и писать сценарии сборки
  • Лучше обрабатывать несколько версий зависимостей
  • Способен работать с несколькими языками программирования и технологиями
  • Активное сообщество, помогающее разрабатывать инструмент
  • Gradle DSL (предметно-ориентированный язык) упрощает структуру конфигурации
  • Gradle обеспечивает повышение производительности с помощью поэтапного использования кеша сборки и Gradle Daemon.

Минусы

  • Интеграция IDE не так хороша, как Maven

Пример Gradle

Вы можете установить Gradle из здесь . После того, как вы настроили Gradle на своем пути, вы можете проверить это:

$ gradle--версия

-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------

Время сборки:2018 г.-01-24 17: 04:52универсальное глобальное время
Ревизия: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Муравей: Apache Ant(TM)версия 1.9.9 скомпилирована в феврале2 2017 г.
JVM: 1.8.0_74(Корпорация Oracle25,74-b02)
ОС: Mac OS X 10.11.6 x86_64

Затем создайте следующую структуру каталогов:

Привет, мир
| -строить.Gradle
``-src
| -главный
``-Джава
``-Привет, мир
``-Привет, мир.Джава

Для helloworld.java поместите код из примера Ant. А для build.gradle введите следующий код:

применить плагин: 'Джава'

версиязнак равно '1.0'

репозитории{
mavenCentral()
}

зависимости{
группа testCompile: 'юнит', имя: 'юнит', версия: '4.12'
}

Вы можете использовать команду gradle tasks –all, чтобы просмотреть все доступные команды. Gradle автоматически выбирает плагины, указанные в файле build.gradle, и показывает дополнительные задачи, доступные благодаря этим плагинам.

Вы можете получить сборку, запустив:

$ gradle jar

СТРОИТЬ УСПЕШНЫЙ через 1 с
2действенные задачи:2казнен

Вы можете запустить свою банку так:

$ java -cp build / libs / helloworld-1.0.банкаПривет, мир
Привет, мир!

Файл jar помещается в папку build / libs.

Заключение

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

Использованная литература: