Maven

Maven е инструмент за управление на проекти, който се занимава с изграждането на проекти (build), зависимости (dependency), дистрибуция, версии и т.н. Софтуерното изграждане е процеса на компилиране на програмния код до преобразуване в изпълнима форма. Maven улеснява работата в екип, документирането и разпространението на проекта.

Също така, Maven хранилището е директория на пакетиран JAR файл с pom.xml файл. Той има информация за конфигурацията за изграждане на проекта. Тук JAR е пакет, който комбинира множество Java класове файлове и свързани ресурси в един файл за разпространение.

Конфигуриране на Mavеn

Maven проектът се конфигурира посредством Project Object Model. POM е XML файл, който съдържа информация за проекта и подробности за конфигурация, използвани от Maven за изграждането на проекта. Общата конфигурация обхваща името на проекта, неговия собственик и неговите зависимости от други проекти (библиотеки). Разработчик може да конфигурира отделни фази от процеса на изграждане, които се реализират като приставки. Например, може да се конфигурира компилатор-плъгин, за да се използва Java версия 1.5 за компилация, или да се използва определена предходна версия на Java пакет, ако има грешки в текущата версия. По-големите проекти трябва да бъдат разделени на няколко модула или подпроекти, всеки със собствен POM. Чрез общ POM може да компилират всички модули с една команда. POM също може да наследява конфигурация от други POM конфигурации. Всички POM наследяват Super POM това е конфигурация по подразбиране, която оказва директориите за съхранение на файловете в проекта, плъгини и др.

Минимален pom.xml

Задължителните полета за конфигуриране на проект с Maven са:

  • Родителския XML таг (project)

  • Версия на обектния модел в POM (modelVersion) - Самата версия на модела се променя много рядко, но е задължителна, за да се гарантира стабилността на използването, ако и когато разработчиците на Maven считат за необходимо да променят модела.

  • Идентификатор на групата, от която е част проекта (groupId) - Уникалния идентификатор на организацията или групата, създала проекта. GroupId е един от ключовите идентификатори на проекта и обикновено се основава като пълното квалифицирано име на домейн на организация. Например (bg.tu.varna.sit)

  • Идентификатор на проекта/артефакт (artifactId) - Уникалното базово име на основния артефакт, генериран от този проект. Основният артефакт за проект обикновено е JAR файл. Останалите артефакти в проекта използват името на основния артефакт, за да образуват своите.

  • Версията на артефакта от посочената група (version) - Версията на артефакта, генериран от проекта. Maven подпомага развитието на проектите като уведомява за наличието на обновления.

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>bg.tu.varna.sit</groupId>
  <artifactId>lab1-maven-app</artifactId>
  <version>1</version>
</project>

Приставки

Плъгинът предоставя набор от цели, които могат да бъдат изпълнени с помощта на командата mvn [plugin-name]:[goal-name]. Например Java проект може да бъде компилиран с компилиращата цел, като се стартира mvn compiler:compile. Има плъгини за изграждане, тестване, управление на версиите, работа на уеб сървър, генериране на файлове на проект за Eclipse и много други.

Плъгините се въвеждат и конфигурират във plugins-секцията на pom.xml файл. Някои основни плъгини са включени във всеки проект по подразбиране с настройки по подразбиране.

Изпълнението на целите за изграждане, тестване и пакетиране на софтуерен проект изисква ръчно изпълнение на всяка съответна цел:

mvn compiler:compile
mvn surefire:test
mvn jar:jar

Концепцията за жизнения цикъл на Maven се справя с този проблем.

Жизнен цикъл за изграждане на проект (the Build Lifecycle)

Maven се базира на основната концепция за жизнения цикъл на изграждане. Това означава, че процесът на изграждане и разпространение на определен артефакт (проект) е ясно дефиниран. Разработчик, изграждайки проект, е необходимо да се научи малък набор от команди за изграждане на Maven проект, а POM ще гарантира, че ще се получи желания резултат. Има три вградени цикъла на изграждане: default, clean and site.

default - Жизненият цикъл по подразбиране обработва изграждането на проектa.

clean - Жизнен цикъл за почистване се грижи за премахване на проекта файлове от предишно изграждане, с цел започне на ново изграждане с чист проект.

site - Жизненият цикъл обработва създаването на документацията за проекта.

Всеки от тези жизнени цикли на изграждане се дефинира от различен стъпки на фазите за изграждане, където фазата на изграждане представлява етап от жизнения цикъл. Например жизненият цикъл по подразбиране се състои от следните фази:

validate - проверява дали проекта е правилен и цялата необходима информация е налична

compile - компилиране на програмния код

test - изпълнение на тествайте върху компилирания изходен код с помощта на подходяща рамка за тестване

package - създаване на файлове за разпространиение (например .jar)

verify - стартиране и проверяване на резултатите от интегрираните тестове, за да се провери работата на изходния проект

install - инсталиране на изходните файлове в локално хранилище, за да се използват в други проекти

deploy - внедряване в среда за изграждане, копира окончателния пакет в отдалечено хранилище за споделяне с други разработчици и проекти.

Целите могат да бъдат свързани с различни фази от жизнения цикъл. Например по подразбиране целта "compiler:compile" се асоциира с фазата "compile", докато целта "surefire:test" е свързана с фазата "test". Когато командата mvn test се изпълнява, Maven изпълнява всички цели, свързани с фазите и така, изпълнява съответните цели асоциирани с фазите на жизнения цикъл по приоритета на изпълнение на фазите.

Пример

...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.3</version>
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
    </plugin>
  </plugins>
</build>
...

Зависимости

Секцията за зависимости съдържа описание на външни проекти и библиотеки, който ще се използват в проекта.

Пример

...
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
...

Mavan съхранява зависимостите в хранилище. Хранилището се разполага на 3 нива локално, централно и отдалечено хранилище.

  • Локалното хранилище съхранява последната версия на библиотеките, който са изтеглени на машината за разработка.

  • Централното хранилище е отдалечен сървър за контрол на версиите при работа на екипи по общ софтуерен проект, то се достъпва през мрежата в която са свържани всички разработчици.

  • Отдалеченото хранилище се намира на обществен сървър поддържан от разработчици на библиотеки, достъпа до тези хранилища се осъществява по глобална мрежа.

Когато се добави нова библиотека в проекта, Maven първо я търси в локалното хранилище, след това в централното и отдалеченото хранилище.

Структура на Maven проект

lab1-maven-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |   `-- bg
    |   |       `-- tu
    |   |           `-- varna
    |   |               `-- sit
    |   |                   `-- App.java
    |   `-- resources
    |       `-- META-INF
    |           |-- application.properties
    `-- test
        |-- java
        |   `-- bg
        |       `-- tu
        |           `-- varna
        |               `-- sit
        |                   `-- AppTest.java
        `-- resources
            `-- test.properties

назад

Last updated