По време на разработването на софтуер разработчиците трябва да възстановяват същия код отново и отново. Те често се опитват да използват 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 със следния код:
И в същата папка helloworld създайте файла ivy.xml със следния код:
>
Структурата на директориите трябва да изглежда така:
Здравей свят|- 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 кодът изглежда така:
XMLSchema-инстанция '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>
>
Можете да генерирате 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 е най -новият инструмент, който осигурява най -голяма гъвкавост.
Препратки:
- http://ant.apache.org/
- http://ant.apache.org/ivy/
- https://maven.apache.org/
- https://gradle.org/
- http://makble.com/gradle-junit-helloworld-example
- https://examples.javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
- https://gradle.org/maven-vs-gradle/
- https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- https://stackoverflow.com/questions/20755437/java-build-tools-ant-vs-maven
- https://technologyconversations.com/2014/06/18/build-tools/
- https://www.quora.com/What-are-the-pros-and-cons-of-Maven-versus-Ant-as-building-tools-for-Java