Ява

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

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

Выбор правильного инструмента сборки: Ant против Maven против Gradle

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

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

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

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

Плюсы

Минусы

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

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

$ ant -version
Apache Ant (TM) версии 1.10.1 составлено 2 февраля 2017 г

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

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

/ **************************
Распечатывает "Hello World"!"
*************************** /
public class helloworld
public static void main (String [] args)
Система.вне.println ("Привет, мир!");

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
























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






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

Привет мир
| - построить.xml
| - плющ.xml
'- src
'-- Привет мир.Ява

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

$ муравейник

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

$ муравейник
Файл сборки: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
разрешить:
[ivy: retrieve] :: Apache Ivy 2.4.0-20141213170938 :: http: // ant.апач.org / ivy / ::
[ivy: retrieve] :: настройки загрузки :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-муравей-1.10.1 / lib / ivy-2.4.0.банка!/ org / apache / ivy / core / настройки / ivysettings.xml
[ivy: retrieve] :: разрешение зависимостей :: org.apache # helloworld; [электронная почта защищена]
MacBook Air.местный
[ivy: retrieve] confs: [по умолчанию]
[ivy: retrieve] найдено junit # junit; 4.12 на публике
[ivy: retrieve] найденная организация.hamcrest # hamcrest-core; 1.3 на публике
[ivy: retrieve] :: отчет о разрешении :: разрешение 397 мс :: артефакты дл 15 мс
---------------------------------------------------------------------
| | модули || артефакты |
| conf | номер | поиск | dwnlded | выселен || номер | dwnlded |
---------------------------------------------------------------------
| по умолчанию | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[плющ: получение] :: получение :: 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' не задано, по умолчанию создается.sysclasspath = последний; установить на ложь
для повторяемых сборок
[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 /
Привет мир.банка
СТРОИТЬ УСПЕШНО
Общее время: 6 секунд

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

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

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

Maven

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

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

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

Плюсы

Минусы

Пример 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: / Библиотека / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Содержание / Главная / jre
Локаль по умолчанию: en_US, кодировка платформы: UTF-8
Название ОС: «mac os x», версия: «10.11.6 ", арка:" x86_64 ", семейство:" mac "

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

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

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

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

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

Привет мир
| - пом.xml
'- src
| - главная
| '-- Ява
| '- com
| '-- название компании
| '-- Привет мир
| '-- Приложение.Ява
'-- контрольная работа
'-- Ява
'- com
'-- название компании
'-- Привет мир
'- AppTest.Ява

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

xsi: schemaLocation = "http: // maven.апач.org / POM / 4.0.0 http: // maven.апач.org / maven-v4_0
_0.xsd ">
4.0.0
ком.название компании.Привет мир
Привет мир
банка
1.0-SNAPSHOT
Привет мир
http: // maven.апач.org


Junit
Junit
3.8.1
контрольная работа


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

пакет $ mvn
[INFO] Поиск проектов…
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[INFO] Сборка helloworld 1.0-SNAPSHOT
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- плагин-ресурсы-maven: 2.6: ресурсы (ресурсы по умолчанию) @ helloworld ---
[ПРЕДУПРЕЖДЕНИЕ] Использование кодировки платформы (на самом деле UTF-8) для копирования отфильтрованных ресурсов, i.е.
сборка зависит от платформы!
[INFO] пропустить несуществующий ресурсDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / SRC / основные / ресурсы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- плагин-компилятор-maven: 3.1: компилировать (компилировать по умолчанию) @ helloworld ---
[ИНФОРМАЦИЯ] Обнаружены изменения - перекомпиляция модуля!
[ПРЕДУПРЕЖДЕНИЕ] Не задана кодировка файла с использованием кодировки платформы UTF-8, i.е. сборка
зависит от платформы!
[INFO] Компиляция 1 исходного файла в / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / цель / классы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- плагин-ресурсы-maven: 2.6: testResources (default-testResources) @
Привет мир ---
[ПРЕДУПРЕЖДЕНИЕ] Использование кодировки платформы (на самом деле UTF-8) для копирования отфильтрованных ресурсов, i.е.
сборка зависит от платформы!
[INFO] пропустить несуществующий ресурсDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / SRC / тест / ресурсы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- плагин-компилятор-maven: 3.1: testCompile (по умолчанию-testCompile) @ helloworld ---
[ИНФОРМАЦИЯ] Обнаружены изменения - перекомпиляция модуля!
[ПРЕДУПРЕЖДЕНИЕ] Не задана кодировка файла с использованием кодировки платформы UTF-8, i.е. сборка
зависит от платформы!
[INFO] Компиляция 1 исходного файла в / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-классы
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-surefire-plugin: 2.12.4: тест (тест по умолчанию) @ helloworld ---
[ИНФОРМАЦИЯ] Каталог отчетов Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
надежные отчеты
-------------------------------------------------------
Т Е С Т С
-------------------------------------------------------
Бегущий ком.название компании.Привет мир.AppTest
Выполненные тесты: 1, Ошибки: 0, Ошибки: 0, Пропущено: 0, Истекшее время: 0.014 с
Полученные результаты :
Выполненных тестов: 1, сбоев: 0, ошибок: 0, пропущенных: 0
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] --- maven-jar-plugin: 2.4: jar (по умолчанию-jar) @ helloworld ---
[ИНФОРМАЦИЯ] Создание jar-файла: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.банка
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФОРМАЦИЯ] СОЗДАТЬ УСПЕХ
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФОРМАЦИЯ] Общее время: 5.624 с
[ИНФОРМАЦИЯ] Окончание: 2018-01-27T00: 11: 10-08: 00
[ИНФОРМАЦИЯ] Конечная память: 16M / 114M
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------

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

$ java -cp target / helloworld-1.0-SNAPSHOT.jar com.название компании.Привет мир.Приложение
Привет мир!

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

Gradle

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

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

Плюсы

Минусы

Пример Gradle

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

$ gradle --version
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Время сборки: 2018-01-24 17:04:52 UTC
Ревизия: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Муравей: Apache Ant (TM) версии 1.9.9 составлено 2 февраля 2017 г
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
ОС: Mac OS X 10.11.6 x86_64

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

Привет мир
| - построить.Gradle
'- src
| - главная
'-- Ява
'-- Привет мир
'-- Привет мир.Ява

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

применить плагин: 'java'
версия = '1.0 '
репозитории
mavenCentral ()

dependencies
Группа testCompile: 'junit', имя: 'junit', версия: '4.12 '

Вы можете использовать команду «gradle tasks -all», чтобы просмотреть все доступные команды. Gradle автоматически подбирает плагины, указанные в сборке.gradle и показывает дополнительные задачи, доступные благодаря плагинам.

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

$ gradle jar
СТРОИТЬ УСПЕШНО за 1 секунду
2 действенные задачи: 2 выполнены

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

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

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

Заключение

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

Рекомендации:

Топ-5 карт для захвата игр
Все мы видели и любили потоковые игры на YouTube. PewDiePie, Jakesepticye и Markiplier - лишь некоторые из лучших игроков, которые заработали миллионы...
Как разработать игру в Linux
Десять лет назад не многие пользователи Linux могли бы предсказать, что их любимая операционная система однажды станет популярной игровой платформой д...
Порты коммерческих игровых движков с открытым исходным кодом
Бесплатные игры с открытым исходным кодом и кроссплатформенные версии игрового движка можно использовать для игры как в старые, так и в некоторые из с...