Перейти к содержимому

Какие типы плагинов существуют в maven

  • автор:

Maven в вопросах и ответах

На странице рассмотрены следующие вопросы использования фреймворка Maven :

  1. Команда создания нового проекта
  2. Структура файла описания проекта pom.xml
  3. GAV-параметры и полное наименование артефакта
  4. Назначение SNAPSHOT
  5. Область действия зависимости scope
  6. Использование внешних зависимостей
  7. Транзитивные зависимости
  8. Maven плагины
  9. Порядок выполнения maven команды
  10. Тестирование maven проекта
  11. Maven репозитории
  12. Предопределёные переменные в файле pom.xml

Команда создания нового проекта

Для создания нового проекта используется плагин archetype с целью (goal) generate. В команде необходимо указать параметры GAV (groupId, artifactId, version) и тип артефакта archetypeArtifactId. Количество разнотипных артефактов у фреймворка maven огромно. Пример копирования наименований архитипов в файл и создания простого maven-проекта :

1. Копирование наименований архитипов в файл mvn archetype:generate > archetypes.txt 2. Создание простого maven проекта mvn archetype:generate \ -DgroupId=com.example \ -DartifactId=framework-factory \ -Dversion=1.0.0 \ -DarchetypeArtifactId=maven-archetype-quickstart

Структура файла описания проекта pom.xml

При описании проекта в файле pom.xml используются следующие теги и секции :

project элемент верхнего уровня, описание проекта;
GAV-параметры параметры проекта;
url интернет-страница проекта;
properties секция свойств проекта;
repositories секция репозиториев;
dependencies секция определения зависимостей проекта;
build описание сборки проекта

Не все секции файла описания проекта pom.xml являются обязательными.

GAV-параметры и полное наименование артефакта

Параметры артефакта GAV включают groupId, artifactId, version. Полное имя артефакта (координата) представляет четыре слова, разделенные знаком двоеточия в следующем порядке groupId:artifactId:packaging:version.

Назначение SNAPSHOT

SNAPSHOT используется в определении версии артефакта и обозначает незавершенность её разработки. При каждой сборке проекта maven проверяет наличие обновленной версии snapshot артефакта в удалённом репозитории и подгружает последний.

Область действия зависимости scope

Область действия зависимости scope определяет этап жизненного цикла проекта, в котором эта зависимость будет использоваться. Maven использует 6 областей :

  • compile — область по умолчанию, использутся, если scope не определена. Compile зависимости доступны во всех classpath проекта;
  • provided — очень похоже на compile, но эта зависимость в сборку не попадает. Предполагается, что зависимость (артефакт) уже присутствует в JDK или в WEB-контейнере. Эта область доступна только на этапах компиляции и тестирования и не является транзитивной;
  • runtime — зависимость с данной областью видимости не обязательна для compilation и используется в фазе выполнения;
  • test — зависимость используется при тестировании кода приложения;
  • system — область похожа на provided за исключением того, что необходимо определить физическое расположение артефакта на диске. Артефакт с этой областью видимости maven не ищет в репозитории;
  • import — эта область используется в зависимости секции при сложных связях (см. dependencyManagement).

Использование внешних зависимостей

В качестве внешних зависимостей, как правило, используются собственные разработки, не размещаемые в центральном и локальном репозиториях. Внешние зависимости определяются в файле pom.xml также, как и другие зависимости – необходимо определить параметры GAV (groupId, artifactId, version) и область видимости scope как system. В теге необходимо указать абсолютный путь к файлу.

  ru.carousel carousel-lib 1.0.0 system d:/projects/libs/carousel-lib.jar   

Транзитивные зависимости

Транзитивные зависимости позволяют избегать необходимости дополнительного указания в секции dependencies библиотек, которые требуются для самой зависимости, и maven включает их в проект автоматически. При разрешении конфликта версий используется принцип «ближайшей» зависимости, то есть выбирается зависимость, путь к которой через список зависимых проектов является наиболее коротким.

Команды «mvn depenency:list» и «mvn dependency:tree» позволяют вывести в консоль зависимости в виде списка или дерева соответственно.

Maven плагины

Maven использует два типа плагинов :

  • плагины сборки (build plugins) — определяются в секции файла pom.xml и выполняются в процессе сборки;
  • плагины отчётов (reporting plugins) — определяются в секции файла pom.xml и выполняются в процесса генерирования сайта.

Плагины используются для :

  • сборки проекта – cоздание файлов jar, war, ear;
  • компиляции исходных кодов проекта (java файлов);
  • тестирования модулей проекта – запуск JUnit тестов;
  • формирования отчётов проекта;
  • создания документации проекта.

Порядок выполнения maven команды

Как будет выполнена следующая команда

mvn clean dependency:copy-dependencies package

Аргументы clean и package являются фазами сборки проекта, «dependency:copy-dependencies» представляет собой задачу, которую выполняет плагин dependency для цели copy-dependencies (копирование зависимостей проекта в поддиректорию target/dependency).

Maven сначала выполнит фазу очистки clean, после этого будут скопированы зависимости «dependency:copy-dependencies», и в завершении выполнится сборка проекта.

Тестирование проекта

Для выполнения JUnit тестов проекта необходимо выполнить команду «mvn test». Чтобы выполнить определенный тест необходимо в командной строке указать полный путь [-Dtest=package.test-class] к конкретному тесту, например :

mvn test -Dtest=com.example.TestConnection

Для запуска сборки проекта с предварительной очисткой поддиректории «target» без выполнения тестов используйте следующую команду :

mvn clean package -Dmaven.test.skip=true

Выполнение тестов можно запретить в секции «properties» файла pom.xml. Для этого можно использовать тег или . Например :

 true  

Примечание : помните, что запретив выполнение тестов в файле pom.xml, нельзя будет выполнять тесты с помощью Maven.

Maven репозитории

Под репозиторием (repository) понимается, как правило, внешние центральные хранилища артефактов, в которых собрано огромное количество наиболее популярных и востребованных библиотек, и локальное хранилище ($\.m2\repository), в котором хранятся копии используемых ранее библиотек. Кроме этого, можно создать репозиторий в самом maven-проекте.

Используемые в проекте внешние репозитории описываются в секции :

  repo1.maven.org http://repo1.maven.org/maven2   

Предопределёные переменные в файле pom.xml

При описании проекта в файле pom.xml можно использовать переменные, на которые можно сослаться с помощью префиксов «project.» или «pom.» Наиболее часто используемые элементы :

  • $ — «target» директория, или тоже самое $ ;
  • $ — путь к директории куда компилятор складывает файлы по умолчанию «target/classes»;
  • $ — наименование проекта;
  • $ — версия проекта.

Maven – Плагины

Maven на самом деле является структурой исполнения плагинов, где каждая задача фактически выполняется с помощью плагинов. Плагины Maven обычно используются для:

  • создать файл jar
  • создать файл войны
  • компилировать файлы кода
  • модульное тестирование кода
  • создать проектную документацию
  • создавать отчеты проекта

Плагин, как правило, предоставляет набор целей, которые могут быть выполнены с использованием следующего синтаксиса –

mvn [plugin-name]:[goal-name]

Например, проект Java может быть скомпилирован с целью компиляции maven-compiler-plugin путем выполнения следующей команды.

mvn compiler:compile

Типы плагинов

Maven предоставил следующие два типа плагинов –

Сборка плагинов

Они выполняются во время процесса сборки и должны быть настроены в элементе файла pom.xml.

Плагины отчетности

Они выполняются во время процесса создания сайта и должны быть настроены в элементе файла pom.xml.

Сборка плагинов

Они выполняются во время процесса сборки и должны быть настроены в элементе файла pom.xml.

Плагины отчетности

Они выполняются во время процесса создания сайта и должны быть настроены в элементе файла pom.xml.

Ниже приведен список нескольких распространенных плагинов –

Очищает цель после сборки. Удаляет целевой каталог.

Компилирует исходные файлы Java.

безошибочный

Запускает юнит-тесты JUnit. Создает протоколы испытаний.

Создает файл JAR из текущего проекта.

Создает файл WAR из текущего проекта.

Создает Javadoc для проекта.

Запускает набор задач ant на любом этапе, упомянутом в сборке.

Очищает цель после сборки. Удаляет целевой каталог.

Компилирует исходные файлы Java.

безошибочный

Запускает юнит-тесты JUnit. Создает протоколы испытаний.

Создает файл JAR из текущего проекта.

Создает файл WAR из текущего проекта.

Создает Javadoc для проекта.

Запускает набор задач ant на любом этапе, упомянутом в сборке.

В наших примерах мы широко использовали maven-antrun-plugin для печати данных на консоли. См. Главу «Создание профилей». Давайте лучше разберемся в этом и создадим pom.xml в папке C: \ MVN \ project.

 xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0  com.companyname.projectgroup  project  1.0     org.apache.maven.plugins  maven-antrun-plugin  1.1    id.clean  clean   run     clean phase         

Затем откройте командную консоль и перейдите в папку, содержащую pom.xml, и выполните следующую команду mvn .

C:\MVN\project>mvn clean

Maven начнет обработку и отображение чистой фазы чистого жизненного цикла.

[INFO] Scanning for projects. [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [clean:clean ] [INFO] [antrun:run ] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012 [INFO] Final Memory: 4M/44M [INFO] ------------------------------------------------------------------

Приведенный выше пример иллюстрирует следующие ключевые понятия –

Плагины указываются в pom.xml с использованием элемента plugins.

Каждый плагин может иметь несколько целей.

Вы можете определить фазу, с которой плагин должен начать свою обработку, используя его фазовый элемент. Мы использовали чистую фазу.

Вы можете настроить задачи, которые будут выполняться, привязав их к целям плагина. Мы связали задачу эха с целью запуска maven-antrun-plugin .

Maven загрузит плагин, если он недоступен в локальном хранилище, и начнет его обработку.

Плагины Maven

Плагины - это способ расширить функциональность Maven в больших диапазонах.

В простейшем случае запустить плагин просто, например:

mvn org.apache.maven.plugins:maven-checkstyle-plugin:check mvn maven-checkstyle-plugin:check mvn checkstyle:check

В данном примере вызывается плагин с groupId "org.apache.maven.plugins", artifactId "maven-checkstyle-plugin", последней версией и целью (goal) "check".

Цель - это действие, которое плагин может выполнить. Целей может быть несколько.

2. Объявление плагина в pom.xml

Объявление плагина похоже на объявление зависимости. Так же, как и зависимости плагины идентифицируется с помощью GAV (groupId, artifactId, version). Объявление плагина в pom.xml позволяет зафиксировать версию плагина, задать ему необходимые параметры, привязать к фазам.

Пример 1. Объявление плагина
 org.apache.maven.plugins maven-checkstyle-plugin 2.6  

После того как плагин объявлен, его можно настроить так, чтобы он автоматически запускался в нужный момент. Это делается с помощью привязки плагина к фазе сборки проекта. В данном примере плагин запустится в фазе проекта package:

Пример 2. Привязка плагина к фазе сборки package
 org.apache.maven.plugins maven-checkstyle-plugin 2.6  package check     

3. Примеры плагинов

3.1. Плагин maven-archetype-plugin

Плагин maven-archetype-plugin предназначен для того чтобы по существующему шаблону создавать новые проекты. Создать проект с помощью maven-archetype-plugin достаточно просто - достаточно набрать:

mvn archetype:generate

Дальше выбрать шаблон из списка, ответить на дополнительные вопросы - и плагин сгенерирует проект.

3.2. Плагин maven-compiler-plugin

Компилятор - основной плагин который используется практически во всех проектах. Он доступен по умолчанию, но текущая версия Java 5.

В следующем примере в конфигурации используется версия java 1.9 (source - версия языка, на котором написана программа. А target - версия Java машины которая будет этот код запускать). И указано, что кодировка исходного кода программы UTF-8.

Пример 3. Использование плагина maven-compiler-plugin
 org.apache.maven.plugins maven-compiler-plugin 2.0.2 1.9 1.9 UTF-8   

3.3. Плагин maven-javadoc-plugin

Плагин maven-javadoc-plugin предназначен для того, чтобы генерировать документацию по исходному коду проекта стандартной утилитой javadoc.

Запускается с помощью команды:

mvn javadoc:javadoc

Документация генерируется в target/site/apidocs каталог текущего проекта.

3.4. Плагин maven-checkstyle-plugin

Плагин проверяет стиль и качество исходного кода и генерирует файл checkstyle-result.xml. Из наиболее часто используемых и простых проверок:

  • наличие комментариев;
  • размер класса не более N строк;
  • в конструкции в try-catch, блок catch не пуст.

Запуск с помощью команды:

mvn checkstyle:check

Т.к. почти каждые проекты пишутся немного по-разному, рекомендуется создать свой набор правил. Или подавить проверку некоторых правил. Для этого используется файл suppressions.xml.

Пример 4. Использование плагина maven-checkstyle-plugin
  org.apache.maven.plugins maven-checkstyle-plugin 2.17 suppressions.xml  
Пример 5. Файл suppressions.xml

3.5. Плагин maven-pmd-plugin

maven-pmd-plugin - плагин для автоматического анализа кода на предмет наличия "нехорошего кода". Также в этом плагине есть цель которая находит дубликаты кода Copy/Paste Detector (CPD).

Существует два режима работы плагина:

    Генерирование отчётов PMD и CPD:

mvn pmd:pmd mvn pmd:cpd​
mvn pmd:check mvn pmd:cpd-check ​

3.6. Плагин findbugs-maven-plugin

findbugs-maven-plugin плагин для автоматического нахождения багов в проекте. Принцип действия плагина основан на поиске шаблонов ошибок. Код проекта проверяются на часто встречаемые ошибки, неправильное использование API и конструкций языка.

Запускаем с помощью

mvn findbugs:check
Пример 6. Использование плагина findbugs-maven-plugin
  org.codehaus.mojo findbugs-maven-plugin 3.0.4 true  

Файл pom.xml

Информация для программного проекта, поддерживаемого Maven, содержится в XML-файле с именем pom.xml (от Project Object Model). При исполнении Мавен проверяет прежде всего, содержит ли этот файл все необходимые данные и все ли данные синтаксически правильно записаны.

Пример 1. Файл pom.xml
  4.0.0 UTF-8  com.examclouds courses 1.0-SNAPSHOT  mysql mysql-connector-java 5.1.39  com.h2database h2 1.4.196   src  resources    org.apache.maven.plugins maven-compiler-plugin 2.0.2 1.8 1.8 UTF-8   org.apache.maven.plugins maven-checkstyle-plugin 2.17 suppressions.xml       org.apache.maven.plugins maven-compiler-plugin 2.0.2 1.8 1.8 UTF-8   org.apache.maven.plugins maven-checkstyle-plugin 2.17 suppressions.xml    checkstyle     org.apache.maven.plugins maven-pmd-plugin 3.8  org.codehaus.mojo findbugs-maven-plugin 3.0.4 true     

1. Корневой элемент

Корневой элемент , в котором прописана схема облегчающая редактирование и проверку, и версия POM.

Пример 2. Корневой элемент

2. Заголовок

Внутри тега project содержится основная и обязательная информация о проекте:

Пример 3. Заголовок
com.examclouds courses 1.0-SNAPSHOT

В Maven каждый проект идентифицируется парой groupId, artifactId.

Во избежание конфликта имён, groupId - наименование организации или подразделения и обычно действуют такие же правила, как и при именовании пакетов в Java - записывают доменное имя организации или сайта проекта.

artifactId - название проекта.

Внутри тега version хранится версия проекта.

Тройкой groupId, artifactId, version (далее - GAV) можно однозначно идентифицировать jar файл приложения или библиотеки. Если состояние кода для проекта не зафиксировано, то в конце к имени версии добавляется "-SNAPSHOT" что обозначает, что версия в разработке и результирующий jar файл может меняться.

3. Тег packaging

Тег определяет какого типа файл будет создаваться как результат сборки. Возможные варианты pom, jar, war, ear.

Тег является необязательным. Если его нет, используется значение по умолчанию - jar.

4. Описание проекта

Также добавляется информация, которая не используется самим Maven, но нужна для программиста, чтобы понять, о чём этот проект:

Пример 4. Описание проекта
powermock-core название проекта для человека PowerMock core functionality. Описание проекта http://www.powermock.org сайт проекта 

5. Зависимости

Зависимости - следующая очень важная часть pom.xml - тут хранится список всех библиотек (зависимостей) которые используются в проекте. Каждая библиотека идентифицируется так же как и сам проект - тройкой groupId, artifactId, version (GAV). Объявление зависимостей заключено в теге . .

Кроме GAV при описании зависимости может присутствовать тег . Он задаёт, для чего библиотека используется. В данном примере говорится, что библиотека с GAV junit:junit:4.4 нужна только для выполнения тестов.

Пример 4. Зависимости
   mysql mysql-connector-java 5.1.39  com.h2database h2 1.4.196  

6. Тег

Тег не обязательный, так как существуют значения по умолчанию. Этот раздел содержит информацию по самой сборке:

  • где находятся исходные файлы,
  • где ресурсы,
  • какие плагины используются.

Пример 5. Тег

  src  resources    org.apache.maven.plugins maven-compiler-plugin 2.0.2 1.8 1.8 UTF-8   org.apache.maven.plugins maven-checkstyle-plugin 2.17 suppressions.xml    

- определяет, откуда Maven будет брать файлы исходного кода. По умолчанию это src/main/java, но вы можете определить, где это вам удобно. Директория может быть только одна (без использования специальных плагинов).

и вложенные в неё теги определяют, одну или несколько директорий, где хранятся файлы ресурсов. Ресурсы в отличие от файлов исходного кода при сборке просто копируются. Директория по умолчанию src/main/resources.

- определяет, в какую директорию компилятор будет сохранять результаты компиляции - *.class файлы. Значение по умолчанию - target/classes.

- имя результирующего jar (war, ear . ) файла с соответствующим типу расширением, который создаётся на фазе package. Значение по умолчанию — artifactId-version.

Maven плагины позволяют задать дополнительные действия, которые будут выполняться при сборке. Например, в приведённом примере добавлен плагин, который автоматически делает проверку кода на наличие "плохого" кода и потенциальных ошибок.

  • Преимущества и недостатки Maven
  • Установка Maven
  • Maven - жизненный цикл сборки
  • Репозитории
  • Плагины Maven
  • Задания

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *