Кіріспе
Maven – негізінен Java жобаларында қолданылатын құрастыруды автоматтандыру құралы. Maven сонымен қатар C#, Ruby, Scala және басқа тілдерде жазылған жобаларды құруға және басқаруға қолданылады. Maven жобасы Apache Software Foundation ұйымында орналасқан, бұл ұйым бұрын Jakarta жобасының бір бөлігі болған. Maven бағдарламалық құралды құрудың екі мәселесін шешеді: бағдарламалық құрал қалай құрылады және оның тәуелділіктері. Apache Ant сияқты бұрынғы құралдардан өзгешелігі, ол құрастыру процедурасы үшін стандартты талаптарды қолданады. Тек ерекше жағдайларды ғана көрсету қажет. XML файлы құрастырылып жатқан бағдарламалық жобаны, оның басқа сыртқы модульдер мен компоненттерге тәуелділігін, құрастыру ретін, каталогтарды және қажетті плагиндерді сипаттайды. Ол кодты компиляциялау және оны жинақтау сияқты нақты міндеттерді орындау үшін алдын ала анықталған мақсаттармен бірге келеді. Maven Java кітапханаларын және Maven плагиндерін Maven 2 Орталық репозиторийі сияқты бір немесе бірнеше репозиторийлерден динамикалық түрде жүктейді және оларды жергілікті кэште сақтайды. Жергілікті кэшке жүктелген артефакттарды жергілікті жобалар жасаған артефакттармен жаңартуға болады. Сондай-ақ, қоғамдық репозиторийлерді де жаңартуға болады. Maven плагиндерге негізделген архитектураны пайдаланады, бұл кез келген қолданбаны стандартты кіріс арқылы басқаруға мүмкіндік береді. Maven 2 үшін C/C++ түпнұсқалық плагиндер де қолдау көрсетіледі. Gradle және sbt сияқты балама технологиялар құрастыру құралдары ретінде XML-ге сүйенбейді, бірақ Maven ұсынған негізгі түсініктерді сақтайды. Apache Ivy құралымен бірге Maven репозиторийлерін қолдайтын тәуелділіктерді басқаруға арналған жекелеген менеджер де жасалды. Apache Maven қайта құруға болатын құрастыруларды қолдайды.
Maven is a build automation tool used primarily for Java projects. Maven can also be used to build and manage projects written in C#, Ruby, Scala, and other languages. The Maven project is hosted by The Apache Software Foundation, where it was formerly part of the Jakarta Project. Maven addresses two aspects of building software: how software is built and its dependencies. Unlike earlier tools like Apache Ant, it uses conventions for the build procedure. Only exceptions need to be specified. An XML file describes the software project being built, its dependencies on other external modules and components, the build order, directories, and required plug ins. It comes with pre defined targets for performing certain well defined tasks such as compilation of code and its packaging. Maven dynamically downloads Java libraries and Maven plug ins from one or more repositories such as the Maven 2 Central Repository, and stores them in a local cache. This local cache of downloaded artifacts can also be updated with artifacts created by local projects. Public repositories can also be updated. Maven is built using a plugin based architecture that allows it to make use of any application controllable through standard input. A C/C++ native plugin is maintained for Maven 2. Alternative technologies like Gradle and sbt as build tools do not rely on XML, but keep the key concepts Maven introduced. With Apache Ivy, a dedicated dependency manager was developed as well that also supports Maven repositories. Apache Maven has support for reproducible builds.
Жобаның нысандық моделі
Жобаның объектілік моделі (ЖОМ) бір жобаның барлық конфигурациясын қамтамасыз етеді. Жалпы конфигурация жобаның атын, иесін және басқа жобаларға тәуелділіктерін қамтиды. Сонымен қатар, плагиндер түрінде іске асырылатын құрастыру процесінің жеке кезеңдерін конфигурациялауға болады. Мысалы, компилятор плагинін Java 1.5 нұсқасын компиляция үшін пайдалануға конфигурациялауға немесе кейбір бірлік тесттері сәтсіз аяқталған жағдайда да жобаны жинақтауды көрсетуге болады. Ірі жобалар бірнеше модульдерге немесе кіші жобаларға бөлінуі керек, әрқайсысының өзіндік ЖОМ-ы болады. Содан кейін бір командамен барлық модульдерді құрастыруға болатын түбірлік ЖОМ жазуға болады. ЖОМ-дар басқа ЖОМ-дардан конфигурацияны мұралай алады. Барлық ЖОМ-дар әдепкі бойынша Бас ЖОМ-нан (Super POM) мұра алады. Бас ЖОМ әдепкі конфигурацияны ұсынады, мысалы, әдепкі бастапқы каталогтар, әдепкі плагиндер және т.б.
Тәуелділік
Maven-нің басты ерекшелігі – тәуелділіктерді басқару. Maven-нің тәуелділіктерді басқару механизмі бағдарламалық кітапханалар немесе модульдер сияқты жеке артефакттарды анықтайтын координаттар жүйесіне негізделген. Жоғарыда келтірілген POM мысалында JUnit координаттары жобаның тікелей тәуелділігі ретінде көрсетілген. Мысалы, Hibernate кітапханасы қажет болса, жобаның POM-ында Hibernate жобасының координаттарын көрсету жеткілікті. Maven автоматты түрде Hibernate-ге қажетті тәуелділіктерді (транзитивті тәуелділіктер деп аталады) жүктеп алады және оларды пайдаланушының жергілікті репозиторийіне сақтайды. Maven 2 Орталық репозиторийі.
Әртүрлі ашық кодты кітапханалар мен фреймворктердің координаттарын табуға арналған Орталық репозиторийдің іздеу жүйесі сияқты іздеу құралдары бар. Бір машинада жасалған жобалар жергілікті репозиторий арқылы бір-біріне тәуелді болуы мүмкін. Жергілікті репозиторий – жүктелген тәуелділіктер үшін кэш және жергілікті түрде құрастырылған артефакттарды сақтаудың орталықтандырылған орны қызметін атқаратын қарапайым қалта құрылымы. Maven mvn install командасы жобаны құрастырып, оның бинарлық файлдарын жергілікті репозиторийге орналастырады. Содан кейін басқа жобалар осы жобаны өз POM-дарында оның координаттарын көрсету арқылы пайдалана алады.