Изборът на правилния инструмент за изграждане: Ant срещу Maven срещу Gradle
По време на разработката на софтуер, разработчиците трябва да възстановяват същия код отново и отново. Те често се опитват да използват bash скриптове или други скриптови езици за автоматизиране на задачата. Има обаче налични инструменти за изграждане, които са по-подходящи за автоматизация на изграждането. Преобладаващите инструменти за изграждане са:
- Apache Ant с Ivy
- Мейвън
- Градле
Нека да проучим инструментите, за да разберем повече.
Apache Ant с Ivy
Apache Ant е инструмент на командния ред, базиран на Java, който използва XML файлове за дефиниране на скриптове за изграждане. Той се използва предимно за Java компилации, но може да се използва и за C / C ++ разработка. Вградените задачи предоставят начини за компилиране, сглобяване, тестване и стартиране на софтуерни приложения. Потребителите могат също да създадат свои собствени „antlibs“, за да подобрят функционалността на Ant. Apache Ivy е инструмент за управление на зависимости, който се интегрира лесно с Ant, за да осигури по-стабилна екосистема. Развитието на Ant започва през 2000г.
Професионалисти
- По-добър контрол върху цялостния процес на изграждане
- Достатъчно гъвкав за работа с всеки работен процес
Минуси
- Базираните на XML файлове за изграждане могат да станат големи и неподдържани
- Много време и ресурси са необходими за поддържане на скриптове за изграждане
- Интеграцията на IDE е трудна за постигане
Мравка с бръшлян Пример
Можете да инсталирате най-новия Ant от тук. Трябва да изтеглите ципа, да разгънете и да поставите папката bin по пътя си. Можете да използвате следната команда, за да видите дали Ant е инсталиран правилно:
$ мравка -версияApache Ant (TM) версия 1.10.1, съставен на 2 февруари 2017 г
След като инсталирате Ant, можете да изтеглите най-новия буркан Ivy и да го поставите в папката lib в директорията Ant.
След като инсталирате Ant, създайте папки helloworld и helloworld / src. Вътре в папката src поставете helloworld.java файл с код:
/ **************************Отпечатва "Hello World!"
*************************** /
публичен клас helloworld
публична статична void main (String [] args)
Система.навън.println ("Здравей, Свят!");
Сега в папката helloworld създайте компилация.xml файл със следния код:
И в същата папка helloworld създайте бръшлян.xml файл със следния код:
Структурата на директориите трябва да изглежда така:
Здравей свят| - изграждане.xml
| - бръшлян.xml
'- src
'-- Здравей свят.java
Сега можете да стартирате компилацията с командата:
$ мравка бурканУспешната компилация трябва да осигури изход като този:
$ мравка бурканBuildfile: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
разрешаване:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.апаш.org / бръшлян / ::
[бръшлян: извличане] :: настройки за зареждане :: url = jar: файл: / Users / zak / BuildTools / ANT / apache
-мравка-1.10.1 / lib / бръшлян-2.4.0.буркан!/ org / apache / ivy / core / settings / ivysettings.xml
[бръшлян: извлича] :: разрешаване на зависимости :: org.apache # helloworld; [имейл защитен]
MacBook Air.местни
[бръшлян: извлича] confs: [по подразбиране]
[бръшлян: извлича] намерен junit # junit; 4.12 публично
[бръшлян: извлича] намерена организация.hamcrest # ядро на ядрото; 1.3 публично
[бръшлян: извличане] :: доклад за резолюция :: разрешаване на 397ms :: артефакти dl 15ms
---------------------------------------------------------------------
| | модули || артефакти |
| conf | номер | търсене | dwnlded | изгонен || номер | dwnlded |
---------------------------------------------------------------------
| по подразбиране | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy: retrieve] :: retrieving :: org.apache # helloworld
[бръшлян: извлича] confs: [по подразбиране]
[ivy: retrieve] 0 копирани артефакта, 4 вече извлечени (0kB / 39ms)
компилиране:
[mkdir] Създадена директория: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
класове
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: предупреждение:
„includeantruntime“ не беше зададен, по подразбиране е изграден.sysclasspath = последен; зададено на false
за повторяеми компилации
[javac] Компилиране на 1 изходен файл в / Users / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / класове
буркан:
[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 е разработен за разрешаване на проблемите, с които се сблъскват сценариите, базирани на Ant. Той запазва XML файловете, но възприема различен подход към организацията. В Ant разработчиците трябва да създадат всички задачи. Maven намалява създаването на задачи, като прилага по-строги стандарти за организиране на код. В резултат на това е по-лесно да започнете със стандартни проекти.
Той също така въведе изтегляния на зависимости, които улесниха разработката. Преди въвеждането на Ivy в Ant, потребителите трябваше да управляват зависимостите локално. Мейвън първо прие философията за управление на зависимостите.
Строгите стандарти на Mavens обаче затрудняват писането на персонализирани скриптове за изграждане. Инструментът е лесен за работа, стига проектът да спазва строгите стандарти.
Професионалисти
- Автоматично изтегляне на зависимост
- Всички зависимости се записват автоматично в контрола на източника като част от скриптовете на Maven
- Стандартизира и опростява процеса на изграждане
- Лесно се интегрира с IDE и CI / CD системи
Минуси
- Не е гъвкав при създаване на персонализирани работни потоци
- Стръмна крива на обучение и процесът е труден за разбиране от начинаещи
- Отнема много време за решаване на проблеми с изграждането и нови интеграции на библиотеки
- Не е добре с множество версии на една и съща зависимост
Пример за Maven
Можете да изтеглите най-новия Maven от тук. Можете да проверите инсталацията по следния начин:
$ mvn --версия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 Project (без POM) 1
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] >>> maven-archetype-plugin: 3.0.0: генериране (клиент по подразбиране)> генериране на източници
@ standalone-pom >>>
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom <<<
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ]
[ИНФО] --- maven-archetype-plugin: 3.0.0: генериране (клип по подразбиране) @ standalone-pom ---
[INFO] Генериране на проект в групов режим
[ИНФОРМАЦИЯ] ----------------------------------------------------------------------------
[INFO] Използване на следните параметри за създаване на проект от Old (1.x) Архетип:
maven-archetype-quickstart: 1.0
[ИНФОРМАЦИЯ] ----------------------------------------------------------------------------
[INFO] Параметър: basedir, Стойност: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Параметър: пакет, Стойност: com.Име на фирмата.Здравей свят
[INFO] Параметър: groupId, Стойност: com.Име на фирмата.Здравей свят
[INFO] Параметър: artifactId, Стойност: helloworld
[INFO] Параметър: packageName, Стойност: com.Име на фирмата.Здравей свят
[INFO] Параметър: версия, Стойност: 1.0-СНИМКА
[INFO] проект, създаден от Old (1.x) Архетип в реж .: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФО] СТРОИТЕЛЕН УСПЕХ
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФО] Общо време: 8.602 с
[INFO] Завършено в: 2018-01-27T00: 05: 37-08: 00
[INFO] Окончателна памет: 15M / 152M
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
Структурата на папките трябва да изглежда така:
Здравей свят| - пом.xml
'- src
| - главен
| '- Java
| '- ком
| '-- Име на фирмата
| '-- Здравей свят
| '- App.java
'-- тест
'- Java
'- ком
'-- Име на фирмата
'-- Здравей свят
'- AppTest.java
Пом.xml съдържа конфигурациите за изграждане. Вътре в пом.xml кодът изглежда така:
_0.xsd ">
Можете да генерирате jar файла, като използвате следната команда:
$ mvn пакет[INFO] Сканиране за проекти ..
[ИНФОРМАЦИЯ]
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[INFO] Изграждане на helloworld 1.0-СНИМКА
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФОРМАЦИЯ]
[INFO] --- maven-resources-plugin: 2.6: ресурси (ресурси по подразбиране) @ helloworld ---
[ПРЕДУПРЕЖДЕНИЕ] Използване на кодиране на платформа (всъщност UTF-8) за копиране на филтрирани ресурси, т.е.д.
build е зависим от платформата!
[INFO] пропуснете несъществуващия ресурсDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[ИНФОРМАЦИЯ]
[INFO] --- maven-compiler-plugin: 3.1: компилиране (компилиране по подразбиране) @ helloworld ---
[INFO] Открити промени - прекомпилиране на модула!
[ПРЕДУПРЕЖДЕНИЕ] Не е зададено кодиране на файлове, използвайки кодиране на платформа UTF-8, т.е.д. build е
зависими от платформата!
[INFO] Компилиране на 1 изходен файл в / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / target / класове
[ИНФОРМАЦИЯ]
[INFO] --- maven-resources-plugin: 2.6: testResources (по подразбиране testResources) @
Здравей свят ---
[ПРЕДУПРЕЖДЕНИЕ] Използване на кодиране на платформа (всъщност UTF-8) за копиране на филтрирани ресурси, т.е.д.
build е зависим от платформата!
[INFO] пропуснете несъществуващия ресурсDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resources
[ИНФОРМАЦИЯ]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (по подразбиране testCompile) @ helloworld ---
[INFO] Открити промени - прекомпилиране на модула!
[ПРЕДУПРЕЖДЕНИЕ] Не е зададено кодиране на файлове, използвайки кодиране на платформа UTF-8, т.е.д. build е
зависими от платформата!
[INFO] Компилиране на 1 изходен файл в / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-classes
[ИНФОРМАЦИЯ]
[INFO] --- maven-surefire-plugin: 2.12.4: тест (тест по подразбиране) @ helloworld ---
[ИНФО] Директория на отчетите на Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
сигурни доклади
-------------------------------------------------------
Т Е С Т С
-------------------------------------------------------
Работи com.Име на фирмата.Здравей свят.AppTest
Изпълнени тестове: 1, неуспехи: 0, грешки: 0, пропуснати: 0, изминало време: 0.014 сек
Резултати:
Изпълнени тестове: 1, неуспехи: 0, грешки: 0, пропуснати: 0
[ИНФОРМАЦИЯ]
[INFO] --- maven-jar-plugin: 2.4: буркан (по подразбиране) @ helloworld ---
[INFO] Изграждане на буркан: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-СНИМКА.буркан
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФО] СТРОИТЕЛЕН УСПЕХ
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
[ИНФО] Общо време: 5.624 с
[INFO] Завършено в: 2018-01-27T00: 11: 10-08: 00
[INFO] Окончателна памет: 16M / 114M
[ИНФОРМАЦИЯ] ------------------------------------------------------------------------
Можете да стартирате jar файла по този начин:
$ java -cp target / helloworld-1.0-СНИМКА.буркан ком.Име на фирмата.Здравей свят.ПриложениеЗдравей свят!
Файлът на jar се поставя в целевата папка.
Градле
Gradle съчетава силата на Ant и Maven. Първата версия на Gradle излезе през 2012 година. Бързо приемане. В момента Google го използва за Android OS.
Вместо XML, Gradle използва езика Groovy. В резултат на това скриптове за изграждане в Gradle са по-лесни за писане и четене. Първоначално използваше Ivy за управление на зависимости, но сега използва свой собствен механизъм за зависимост.
Професионалисти
- Осигурява стандартизация, като същевременно остава гъвкав
- Лесен за четене и писане скриптове за изграждане
- По-добре в обработката на множество версии на зависимости
- В състояние да се справи с множество езици и технологии за програмиране
- Активна общност, помагаща за разработването на инструмента
- Gradle DSL (специфичен за домейн език) го прави проста конфигурационна структура
- Gradle осигурява подобрения на производителността, като използва постепенно, изграждане на кеш памет и Gradle Daemon
Минуси
- IDE интеграцията не е толкова добра, колкото Maven
Пример за Gradle
Можете да инсталирате Gradle от тук. След като настроите Gradle по пътя си, можете да го проверите чрез:
$ gradle --version------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Време за изграждане: 2018-01-24 17:04:52 UTC
Ревизия: 77d0ec90636f43669dc794ca17ef80dd65457bec
Грув: 2.4.12
Ant: 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
| - главен
'- Java
'-- Здравей свят
'-- Здравей свят.java
За здравия свят.java постави кода от примера Ant. И за изграждане.gradle поставете следния код:
приложи плъгин: 'java'версия = '1.0 '
хранилища
mavenCentral ()
зависимости
testCompile група: 'junit', име: 'junit', версия: '4.12'
Можете да използвате командата “gradle tasks -all”, за да разгледате всички налични команди. Gradle автоматично взема добавките, които сте посочили в компилацията.gradle файл и ви показва допълнителните задачи, налични поради приставките.
Можете да получите компилацията, като изпълните:
$ gradle бурканСТРОИТЕ УСПЕШНО за 1 секунди
2 изпълними задачи: 2 изпълнени
Можете да стартирате бурканчето си така:
$ java -cp build / libs / helloworld-1.0.буркан helloworldЗдравей свят!
Файлът на jar се поставя в папката build / libs.
Заключение
Сред инструментите за изграждане Ant може да бъде полезен за по-малки проекти, докато Maven е по-добре да се увери, че всички разработчици спазват едни и същи правила. Gradle е най-новият инструмент, който осигурява най-голяма гъвкавост.
Препратки:
- http: // мравка.апаш.организация /
- http: // мравка.апаш.организация / бръшлян /
- https: // maven.апаш.организация /
- https: // gradle.организация /
- http: // makble.com / gradle-junit-helloworld-пример
- https: // примери.javacodegeeks.com / core-java / gradle / gradle-hello-world-tutorial /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.апаш.org / guides / get-started / maven-in-five-minutes.html
- https: // stackoverflow.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // технологични разговори.com / 2014/06/18 / build-tools /
- https: // www.квора.com / Какви са плюсовете и минусите на Maven-versus-Ant-as-building-tools-for-Java