Apache Maven – Рамка за автоматизиране на изграждането на проекти, зададени на езика XML- POM (на английски Project Object Model ).
Думата Maven идва от езика идиш и означава приблизително „колекционер на знания“.
Apache Maven за разлика от другия инструмент за изграждане на проекти Apache Ant, той осигурява по-скоро декларативно, отколкото императивно изграждане на проекти. Това означава, че файловете на проекта pom.xml съдържат неговото декларативно описание, а не отделни команди. Всички задачи за обработка на файлове Apache Maven изпълнява чрез приставки.
Информацията за софтуерен проект, поддържан от Apache Maven, се съдържа във файл XML-с име pom.xml (от Project Object Model ). При изпълнение на Apache Maven се проверява преди всичко дали този файл съдържа всички необходими данни и дали всички данни са синтактично правилно записани.
Конфигурацията включва името на проекта, неговия собственик и зависимостите му от други проекти. Възможно е също така да се конфигурират отделни фази от процеса на изграждане на проекта (Build Process ), реализирани чрез приставки. Например, възможно е да се конфигурира приставка за компилатор така, че да използва определена версия на Java, или да се определи опаковане на проекта дори в случай на отрицателен резултат от някои тестове.
Големите проекти трябва да бъдат разделени на няколко модула или подпроекта, всеки от които има свой собствен POM.. След това можете да напишете основен POM, чрез който всички модули се компилират с една команда. POM-можете да наследявате конфигурация от други POM-. По подразбиране всички POM-наследяват от супер POM-. Super POM предоставя конфигурация по подразбиране, като например структура на директориите по подразбиране, плъгини по подразбиране и т.н..
Apache Maven поддържа принципа „споразумение преди конфигуриране“ (Convention over Configuration ). Тъй като проектът се придържа към избраната система от споразумения, не е необходимо те да се посочват, което значително опростява pom.xml.. Почти всички стандарти, на които разчита Apache Maven, обаче могат да се променят чрез индивидуална конфигурация.
Стандартна структура на каталога Apache Maven
Тъй като проектът се придържа към нея, не е необходимо да се посочват пътища до файловете, което значително опростява нещата pom.xml.
Коренна директория на проекта: файл pom.xml и всички по-нататъшни поддиректории src: всички изходни файлове src/main: изходни файлове за самия продукт src/main/java: Java-изходен код src/main/resources: други файлове, използвани по време на компилирането или изпълнението, например Properties-файлове src/test: изходни файлове, необходими за организиране на автоматичното тестване src/test/java: JUnit -тестови задачи за автоматично тестване target: всички файлове, създадени по време на изпълнението Apache Maven файлове target/classes: компилирани класове Java-
Стандартен набор от приставки Apache Maven
По-голямата част от функционалността на Apache Maven се осигурява от плъгини. Една приставка постига редица цели, като използва следния синтаксис:
mvn [име на плъгин]:[име на цел]
Например проект Java-може да бъде компилиран от компилатор за плъгини, като се изпълни командата:
mvn compiler:compile
Съществуват плъгини Apache Maven за изграждане, тестване, контрол на източника, стартиране на уеб сървър, генериране на Eclipse-проектни файлове и много други. Плъгините се изброяват и конфигурират в секцията
Въпреки това би било твърде тромаво да се описва ръчно изграждането, тестването иопаковката на проекта:
mvn compiler:compile mvn surefire:test mvn jar:jar
Концепцията за жизнения цикъл на проекта решава този проблем по-удобно.
Стандартен жизнен цикъл Apache Maven
Жизненият цикъл на проекта е списък от именувани фази, който определя реда, по който се изгражда проектът. Apache Maven използва следния жизнен цикъл по подразбиране:
В тази фаза се разрешават зависимостите и се изтеглят от интернет, ако е необходимо.
(Например – JUnit -пакетът се изтегля от интернет).
(Тестовите класове не се предават на крайните потребители.)
Обикновено става въпрос за създаване на файл JAR- или WAR-.
Сега той е достъпен като модул за други локални проекти.
Стабилната версия на проекта вече е достъпна за широк кръг разработчици.
Apache Maven има също така стандартен жизнен цикъл за почистване (Cleaning) и за генериране на своята страница (Site). Ако „Clean“ беше част от нормалния жизнен цикъл, проектът щеше да се почиства всеки път, когато се изгражда, което е нежелателно.
Стандартните жизнени цикли могат да бъдат значително разширени с помощта на плъгини и архетипи Apache Maven. Плъгините Apache Maven позволяват в стандартния жизнен цикъл да бъдат вмъкнати нови стъпки (като например разпространение на сървър за приложения) или да бъдат разширени съществуващи стъпки. Архетипите Apache Maven са заготовки за различни софтуерни пакети (ако отговарят на стандартите за структура Apache Maven ).
Ако структурата на проекта отговаря на стандартите на Apache Maven, командата:
mvn package
компилира всички файлове на Java-, изпълнява предоставените тестове и опакова доставения програмен код и ресурси в target/my-app-1.0.jar (като се приема, че artifactId е дефиниран като ‘my-app’, а версията като 1.0.)
Като използва действителния Apache Maven, потребителят предоставя само конфигурацията на своя проект, тъй като реалната работа по компилирането на проекта, почистването на целевите директории, стартирането на елементарните тестове, генерирането на API-документи и т.н. се извършва от конфигурируемите плъгини. По принцип не трябва да се налага потребителят сам да пише плъгините. Сравнете това с Apache Ant и make, където са написани императивни процедури за изпълнение на горните задачи.
Поддържани IDE Apache Maven
За най-разпространените интегрирани среди за разработка (IDE) има налични приставки за удобно управление на Maven-. Списъкът им включва: 1:
Eclipse Classic IntelliJ IDEA NetBeans IDE JBuilder Oracle JDeveloper (version 11.1.2 ) MyEclipse GNU Emacs
Тези плъгини също така предоставят възможност за удобно редактиране на POM или използване на POM за пълно описание на зависимостите на проекта за нуждите на използвания проект IDE.
Apache Maven се основава на архитектура на плъгините, която позволява плъгините да се прилагат към различни задачи (Compile, Test, Build, Deploy, Checkstyle, PMD, SCP Transfer ) за даден проект, без да е необходимо изричното им инсталиране. Това е възможно, тъй като информацията се подава към приставката чрез стандартен вход, а резултатите се записват на нейния стандартен изход. Теоретично това позволява на всеки да пише плъгини за взаимодействие с инструменти за създаване на проекти (компилатори, инструменти за тестване и др.) за всеки друг език. В действителност поддръжката на езици, различни от Java, засега е минимална. Съществува приставка за Microsoft.NET Framework, както и плъгини за C/C++ Maven Native и Maven NAR.
Броят на плъгините сега е много впечатляващ: от плъгини, които ви позволяват да стартирате уеб приложение директно от Apache Maven, за да го тествате в браузъра, през такива, които ви позволяват да тествате или създавате банки данни, до такива, коитогенериране на Web Services. Задачата на разработчика често се ограничава до идентифициране и прилагане на необходимитеприставка.


