Мравка срещу Мейвън срещу Градъл

Ant Vs Maven Vs Gradle



По време на разработването на софтуер разработчиците трябва да възстановяват същия код отново и отново. Те често се опитват да използват bash скриптове или други скриптови езици, за да автоматизират задачата. Има обаче налични инструменти за изграждане, които са по -подходящи за автоматизация на изграждане. Преобладаващите инструменти за изграждане са:

Нека разгледаме инструментите, за да разберем повече.







Apache Ant с Ivy

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



Професионалисти



  • По -добър контрол върху цялостния процес на изграждане
  • Достатъчно гъвкав за работа с всеки работен процес

Против





  • XML файловете за изграждане могат да станат големи и неподдържащи се
  • Много време и ресурси са необходими за поддържане на скриптове за изграждане
  • Интеграцията с IDE е трудно постижима

Мравка с пример за бръшлян

Можете да инсталирате най -новата Ant от тук . Трябва да изтеглите zip, да разгънете и да поставите папката bin в пътя си. Можете да използвате следната команда, за да видите дали Ant е инсталиран правилно:

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

След като инсталирате Ant, можете да изтеглите най -новия буркан Ivy и да го поставите в папката 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}/класове“/>
име='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' модул='Здравей свят'/>
>
орг='junit' име='junit' рев='4.12'/>
>
>

Структурата на директориите трябва да изглежда така:

Здравей свят
|- build.xml
| - ivy.xml
`- src
`- helloworld.java

Сега можете да стартирате изграждането с командата:

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

Успешното изграждане трябва да осигури изход като този:

$ мравка буркан
Buildfile: /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 публично
[бръшлян: извличане] :: доклад за разрешаване :: разрешаване 397ms :: артефакти dl 15ms
-------------------------------------------------- -------------------
| | модули || артефакти |
| conf | номер | търсене | dwnlded | изгонен || номер | dwnlded |
-------------------------------------------------- -------------------
| по подразбиране | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: retrieve] :: извличане :: org.apache#helloworld
[ivy: retrieve] 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' не е зададен, по подразбиране е build.sysclasspath = last; зададено на false
за повтарящи се компилации
[javac] Компилиране на 1 изходен файл в/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes

буркан:
[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 target в build.xml.

Maven

Maven е разработен, за да разреши проблемите, с които се сблъсква скриптът, базиран на Ant. Той запазва XML файловете, но възприема различен подход към организацията. В Ant разработчиците трябва да създадат всички задачи. Maven намалява създаването на задачи чрез прилагане на по -силни стандарти за организиране на кода. В резултат на това е по -лесно да започнете със стандартни проекти.

Той също така въведе изтегляне на зависимости, което улесни разработката. Преди въвеждането на Ivy в Ant, потребителите трябваше да управляват локално зависимости. Maven възприема първо философията за управление на зависимостите.

Строгите стандарти на Mavens затрудняват писането на скриптове за персонализирана компилация. Инструментът е лесен за работа, стига проектът да спазва строгите стандарти.

Професионалисти

  • Автоматично изтегляне на зависимости
  • Всички зависимости автоматично се записват в контрола на източника като част от скриптовете на Maven
  • Стандартизира и опростява процеса на изграждане
  • Лесно се интегрира с IDE и CI/CD системи

Против

  • Не е гъвкав при създаването на персонализирани работни потоци
  • Стръмната крива на обучение и процесът е труден за разбиране от начинаещите
  • Отнема много време за решаване на проблеми при изграждането и нова библиотечна интеграция
  • Не е добре с множество версии на една и съща зависимост

Пример за Maven

Можете да изтеглите най -новия Maven от тук . Можете да проверите инсталацията по следния начин:

$ mvn --версия
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017 г.-10-18T00:58:13-07: 00)
Maven home: /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', семейство:'mac'

Създайте папка helloworld и генерирайте проект със следната команда:

$ mvn архетип: генериране -DgroupId = com.Име на фирмата.Здравей свят-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =невярно

Тя трябва да създаде структурата на папките и да генерира изхода, който изглежда така:

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

Структурата на папките трябва да изглежда така:

Здравей свят
|- pom.xml
- src
|- основен
| -java
| - с
| -- Име на фирмата
| -- Здравей свят
| - App.java
-тест
-java
- с
-- Име на фирмата
-- Здравей свят
- AppTest.java

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

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
XMLSchema-инстанция '
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-НАСТРОЙКА>
>Здравей свят>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>тест>
>
>
>

Можете да генерирате jar файла, като използвате следната команда:

$ mvn пакет

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

-------------------------------------------------- -----
Т Е С Т С
-------------------------------------------------- -----
Изпълнява се com.companyname.helloworld.AppTest
Изпълнени тестове: 1, Грешки: 0, Грешки: 0, Пропуснати: 0, Изминало време: 0.014 сек

Резултати:

Изпълнени тестове: 1, Грешки: 0, Грешки: 0, Пропуснати: 0

[ИНФОРМАЦИЯ]
[INFO] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[INFO] Изграждане на буркан:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[ИНФОРМАЦИЯ] СТРОЙ УСПЕХ
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------
[INFO] Общо време: 5.624 s
[INFO] Завършен на: 2018-01-27T00: 11: 10-08: 00
[INFO] Крайна памет: 16M/114M
[ИНФОРМАЦИЯ] ----------------------------------------------- -------------------------

Можете да стартирате jar файла по следния начин:

$ java -cp target/helloworld-1.0-МОМЕНТАЛНА СНИМКА.бурканс.Име на фирмата.Здравей свят.Приложение
Здравей свят!

Jar файлът се поставя в целевата папка.

Gradle

Gradle съчетава силата на Ant и Maven. Първата версия на Gradle е пусната през 2012 г. Тя е видяна бързо. Google в момента го използва за Android OS.

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

Професионалисти

  • Осигурява стандартизация, като същевременно остава гъвкав
  • Лесни за четене и писане скриптове за изграждане
  • По -добре при работа с множество версии на зависимости
  • Възможност за работа с множество езици за програмиране и технологии
  • Активна общност помага за разработването на инструмента
  • Gradle DSL (Domain-Specific Language) го прави проста конфигурационна структура
  • Gradle осигурява подобрения в производителността, използвайки постепенно, кеш за изграждане и демон на Gradle

Против

  • Интеграцията с IDE не е толкова добра, колкото Maven

Пример за Gradle

Можете да инсталирате Gradle от тук . След като настроите Gradle по пътя си, можете да го проверите чрез:

$ gradle--версия

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

Време за изграждане:2018 г.-01-24 17: 04:52UTC
Ревизия: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Мравка: Мравка Апач(TM)версия 1.9.9, компилирана на февруари2 2017 г.
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
Операционна система: Mac OS X 10.11.6 x86_64

След това създайте следната структура на директории:

Здравей свят
| -изграждане.gradle
-src
| -главен
-java
-Здравей свят
-Здравей свят.java

За helloworld.java поставете кода от примера Ant. А за build.gradle поставете следния код:

приложете плъгин: 'java'

версия= '1.0'

хранилища{
mavenCentral()
}

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

Можете да използвате gradle tasks - всички команди, за да разгледате всички налични команди. Gradle автоматично взема приставките, които посочвате във файла build.gradle, и ви показва допълнителните налични задачи, дължащи се на приставките.

Можете да получите компилацията, като изпълните:

$ gradle буркан

BUILD УСПЕШЕН за 1 сек
2изпълними задачи:2изпълнен

Можете да пуснете буркана си така:

$ java -cp build/libs/helloworld-1.0.бурканЗдравей свят
Здравей свят!

Jar файлът се поставя в папката build/libs.

Заключение

Сред инструментите за изграждане Ant може да бъде полезен за по -малки проекти, докато Maven е по -добър, за да се увери, че всички разработчици спазват едни и същи правила. Gradle е най -новият инструмент, който осигурява най -голяма гъвкавост.

Препратки: