〰️
Programming with Java
  • Програмиране с JAVA
  • Обектно-ориентирано програмиране - 1 част
    • Лабораторно упражнение 1
      • Основи на програмирането с Java за начинаещи‎
        • Oбщи термини в Java
        • Основни характеристики на JAVA‎
        • Инсталиране на JDK
        • Инсталиране на Intellij
      • Първа програма в Java
      • Системен изход в JAVA
      • Дефиниране на променливи
      • Примитивни типове данни
      • Оператори
      • If-else
      • Switch-Case
      • For loop
      • While loop
      • Do-while loop
      • Continue
      • Break
      • Задачи
    • Лабораторно упражнение 2
      • Клас
      • Обект
      • Ключова дума new
      • Запазена дума static
      • Конвенции за именуване в Java
      • Wrapper Class
      • Сравняване на
      • Нуждата Wrapper Class
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 3
      • Наследяване
      • this и super
      • Модификатори за достъп
      • Капсулиране
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 4
      • Проследяване на грешки
      • Оценяване на изрази
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 5
      • Полиморфизъм
      • Абстрактен клас
      • Интерфейс
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 6
      • Разлика между Абстрактен клас и Интерфейс
        • Разлика 1
        • Разлика 2
        • Разлика 3
        • Разлика 4
        • Разлика 5
        • Разлика 6
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 7
      • String
      • Enum
      • Обработка на изключения
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 8
      • Генерични класове
      • Генеричен метод
      • Параметри на типа в Java Generics
      • Предимства на генериците
      • Генериците работят само с референтни типове
    • Лабораторно упражнение 9
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 10
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 11
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 12
      • Упражнения за извънаудиторна заетост
    • Лабораторно упражнение 13
      • Упражнения за извънаудиторна заетост
      • Упражнения за извънаудиторна заетост
  • Обектно-ориентирано програмиране - 2 част
    • Лабораторно упражнение 1
      • SRP - Single Responsibility Principle
        • Задачи
      • OCP - Open-Closed Principle
        • Задачи
    • Лабораторно упражнение 2
      • LSP - Liskov Substitution Principle
        • Задачи
      • ISP - Interface Segregation Principle
        • Задачи
      • DI - Dependency Inversion Principle
        • Задачи
    • Лабораторно упражнение 3
      • Singleton
        • Задачи
      • Builder
        • Задачи
    • Лабораторно упражнение 4
      • Factory Method
      • Abstract Factory
      • Задачи
    • Лабораторно упражнение 5
    • Лабораторно упражнение 6
      • Decorator
      • Bridge
        • Композиция
      • Задачи
    • Лабораторно упражнение 7
      • Adapter
      • Задачи
    • Лабораторно упражнение 8
      • Composite
      • Proxy
      • Задачи
    • Лабораторно упражнение 9
    • Лабораторно упражнение 10
      • Visitor
      • State
      • Задачи
    • Лабораторно упражнение 11
      • Observer
      • Задачи
    • Лабораторно упражнение 12
      • Chain of Responsibility
      • Command
      • Задачи
    • Лабораторно упражнение 13
  • Интернет технологии 2023
    • Лабораторно упражнение 1
      • HTTP протокол
        • Синтаксис на URL
        • HTTP съобщения
        • Методи за HTTP заявка
        • Кодове за състояние на HTTP отговор
      • Postman
        • Изпращане на заявка с Postman
        • Получаване на отговор
      • Задачи за работа с Postman
    • Лабораторно упражнение 2
      • Работа с Tomcat
      • Maven
      • Създаване на Maven проект в IntelliJ Ultimate Edition
      • Създаване на Maven проект в IntelliJ Community Edition
      • Създаване на Maven проект в Eclipse IDE
    • Лабораторно упражнение 3
      • Java Servlets
      • Жизнен цикъл на сървлета
      • Създаване на сървлети
      • Задачи за създаване на сървлети
    • Лабораторно упражнение 4
      • Extensible Markup Language
      • Java Architecture for XML Binding
      • JavaScript Object Notation
      • Задачи
    • Лабораторно упражнение 5
    • Лабораторно упражнение 6
      • Spring Boot
      • Създаване на Spring boot проект
      • Структура на Spring Boot проект
        • Файлът pom.xml
        • Main клас в Spring Boot
        • Управление на конфигурацията с application.properties
      • Задача
    • Лабораторно упражнение 7
      • Комуникационен поток и CRUD операции
      • ResponseEntity
      • Избрани анотации
      • Задача
    • Лабораторно упражнение 8
      • Lombok
      • Data transfer object (DTO)
      • Обработване на изключения в Spring Boot приложение
        • Клас Optional<T>
      • Валидиране на данните от заявката
      • Задачи
    • Лабораторно упражнение 9-10
      • Конфигуриране на PostgreSQL DB
      • Jakarta Persistence анотации
      • Repository слой
      • Задачи
    • Лабораторно упражнение 11
      • Проследяване на сесии
      • Филтри и FilterChain
      • Spring Security
        • Добавяне на Spring Security в Spring Boot приложение
        • Конфигуриране на филтри
        • Удостоверяване със Spring Security
        • Защита на метод със Spring Security
      • Задача
    • Лабораторно упражнение 12
      • JSON Web Token
      • Защита с помощта на JWT
      • Задача
    • Лабораторно упражнение 13
  • Програмиране за мобилни и Интернет устройства
    • Лабораторно упражнение 1
      • Задачи
    • Лабораторно упражнение 2
      • Среда за разработване
        • Създаване на проект
        • Структора на проект
        • Виртуално устройство с Android OS
      • Задача
    • Лабораторно упражнение 3
      • Activity
      • Layout
        • XML описание
      • Задача
    • Лабораторно упражнение 4
      • Activity Lifecycle
      • Intent
      • Слушатели на събитията и методи за обратно извикване
      • Задача
    • Лабораторно упражнение 5
      • Слушатели на събитията и методи за обратно извикване
      • Задача
    • Лабораторно упражнение 6
      • Фрагменти
      • DialogFragment
      • Задача
    • Лабораторно упражнение 7
      • Примери
        • BaseAdapter
        • ArrayAdapter
        • Custom ArrayAdapter
      • RecyclerView
        • Пример
      • CardView
      • Задача
    • Лабораторно упражнение 8
      • Runnable
      • HandlerThread
      • ThreadPoolExecutor
      • Задача
    • Лабораторно упражнение 9
      • Задача
      • Задача
      • Пример
  • Интернет Технологии
    • Лабораторно упражнение 1
      • Инсталиране и настройка на необходимата среда за работа в упражненията
      • Maven
      • Създаване на Maven проект в Eclipse IDE
      • Създаване на Maven проект в IntelliJ
      • Работа с Tomcat
      • Задача
    • Лабораторно упражнение 2
      • HTML форми
      • Cascading Style Sheets (CSS)
        • CSS селектори
        • Някои CSS свойства
      • Задача
    • Лабораторно упражнение 3
      • Java Servlets
      • Жизнен цикъл на сървлета
      • Създаване на сървлети
      • Задачи
    • Лабораторно упражнение 4
      • Java Server Pages технология. Същност и детайли
      • Пренасочване между Servlet и JSP
      • Задачи
    • Лабораторно упражение 5
      • Build pattern
      • JavaBean
      • Задачи
    • Лабораторно упражение 6
      • Проследяване на сесии
      • Управление на бисквитки (Cookies)
      • Задачи
    • Лабораторно упражнение 7
      • Проследяване на сесии
      • Управление на бисквитки (Cookies)
      • Servlet Filter
      • Задачи
    • Лабораторно упражнение 8
      • Servlet Filter
      • Прихващане на грешки
      • Задачи
    • Лабораторно упражнение 9
      • Extensible Markup Language
      • JavaScript Object Notation
        • Fetch
      • Задача
    • Лабораторно упражнение 10
      • Java Architecture for XML Binding
      • Задачи
Powered by GitBook
On this page
  • Конфигуриране на Mavеn
  • Минимален pom.xml
  • Приставки
  • Жизнен цикъл за изграждане на проект (the Build Lifecycle)
  • Зависимости
  • Структура на Maven проект

Was this helpful?

  1. Интернет технологии 2023
  2. Лабораторно упражнение 2

Maven

PreviousРабота с TomcatNextСъздаване на Maven проект в IntelliJ Ultimate Edition

Last updated 2 years ago

Was this helpful?

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

Минимален 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>
...

Maven съхранява зависимостите в хранилище. Хранилището се разполага на 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
Super POM