PTI-IT

Интернет програмиране с JAVA

View the Project on GitHub theVelislavKolesnichenko/PTI-IT

назад

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 може да компилираt всички модули с една команда. POM също може да наследява конфигурация от други POM конфигорации. Всички POM наследяват Super POM това е конфигурация по подразбиране, която оказва директориите за съхранение на файловете в проекта, плъгини и др.

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

Задължителните полета за конфигориране на проект с 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 и много други.

Плъгините се въвеждат и конфигурират във -секцията на 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

назад