Разберем что такое плагин.Плагин это такие скромные программы, которые расширяют функционал основной программы.
Плагины прописываются в POM файле.И после этого Maven сам скачает прописанный плагин.Установит его тоже автоматически.От программиста , в общем порядке установки, требуется только прописать три строки кода в POM.Прописываются также как и зависимости.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.2</version>
</plugin>
У большинства плагинов имеется несколько целей(goal). Цель-это тот результат, который мы хотим получить от работы выбранного плагина.Цель можно задать в разной фазе выполнения проекта.В секции <execution>…<execution/>. Фазы проекта: compile,test,install,package,test,deploy,site,clean.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<phase>package</phase>
</execution>
</executions>
</plugin>
Так же для большинства плагинов задаются индивидуальные настройки в секции <configuration>…</configuration>
maven-archetype-plugin плагин для создания из существующего шаблона готового проекта.Имеется ввиду создание структуры проекта(основные файлы и директории).
maven-compiler-plugin как следует из названия, это компилятор.Используется по умолчанию в большинстве проектов.Ему частенько необходимы индивидуальные настройки
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
В данном примере указывается версия jdk и текущая кодировка проекта.Где source это версия на которой написан код, а target это версия для запуска проекта.Плагин имеет две цели(goal): compiler:compile и compiler:testCompile. Имеет дополнительные настройки.С ними можно ознакомится в документации к плагину.
maven-surefire-plugin запускает тесты и генерирует отчёты по результатам их выполнения. Отчёты сохраняются в ${basedir}/target/surefire-reports и находятся в двух форматах — txt и xml. Имеет одну цель(goal) surefire:test тесты можно писать используя библиотеки JUnit или TestNG.
по умолчанию запускаются все тесты с такими именами * «**/Test*.java» — включает все java файлы которые начинаются с «Test» и расположены в поддиректориях. * «**/*Test.java» — включает все java файлы которые заканчиваются на «Test» и расположены в поддиректориях. * «**/*TestCase.java» — включает все java файлы которые заканчиваются на «TestCase» и расположены в поддиректориях.
Чтобы вручную добавлять или удалять классы тестов можно посмотреть здесь http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html.
maven-source-plugin создает jar. Добавляется в POM в раздел /project/build/plugins/
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
jar будет собираться на фазе verify.
maven-javadoc-plugin генерирует документацию по исходному коду проекта стандартной утилитой javadoc. Документация к плагину.
maven-site-plugin создает сайт проекта. Сгенерированные файлы будут находиться в директории target/site.
Плагин можно настраивать, добавлять дополнительные страницы, пункты меню и т.д.
maven-checkstyle-maven проверяет правильность написания кода, стиль и качество кода.
Подключение плагина стандартно:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.7</version>
</plugin>
по результатам проверки будет создан файл checkstyle-result.xml. Можно и нужно создать свой набор правил. Полный набор правил описан тут: http://checkstyle.sourceforge.net/availablechecks.html и задать его можно в специальном конфигурационном файле. (см. http://checkstyle.sourceforge.net/config.html) пример файла со сравнительно нестрогой проверкой приведён…
Внутри jar плагина есть примеры конфигурационных файлов:
- config/sun_checks.xml — от Sun Microsystems. Используются по умолчанию.
- config/maven_checks.xml — от Maven.
- config/turbine_checks.xml -от Turbine.
- config/avalon_checks.xml — от Avalon.
Если каком то месте кода появляется ошибка, но по объективным причинам код такой и должен быть, можно подавить вывод ошибки используя модуль SuppressionCommentFilter или SuppressionFilter
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.6</version>
<configuration>
<configLocation>src/config/checkstyle.xml</configLocation>
<consoleOutput>true</consoleOutput>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals><goal>check</goal></goals>
</execution>
</executions>
</plugin>
findbugs-maven-plugin плагин для автоматического нахождения багов в проекте.
Предположим, вы создали Maven приложение java. В среде разработки все исполнялось замечательно.Но при запуске из операционной среды возникают ошибки. И первая ошибка это отсутствие класса main. Все верно, Maven-у необходимо указать точку входа в программу. Указать тот самый public static void main(String[] args).При создании любого файла jar, внутри него будет создан файл MANIFEST.MF :
Manifest-Version: 1.0
Permissions: sandbox
JavaFX-Version: 8.0
Created-By: JavaFX Packager
Main-Class: org.example.MainApp
В последнем необходимо прописать нашу точку входа.Можно прописать ручками в готовом jar. Распаковать его, дописать MANIFEST.MF в текстовом редакторе и заново запаковать.Но у нас есть Maven. Он все сделает за нас.
Можно сделать так:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mainClass>org.example.MainApp</mainClass>
</properties>
Обратите внимание что указывается только класс с главным методом. Сам метод будет выбран автоматически. Сначала пишется имя пакета, если пакет существует, затем сам класс.
Но правильней будет прописать в плагине maven-jar-plugin путь к главному классу.Прописывать необходимо в секции <build>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2 </version>>
<configuration>
<archive>
<manifest>
<mainClass>путь к главному класс</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
И все бы ничего, но возникает другая проблема.В jar файле нет библиотек, зависимость на которые прописаны в POM. Решения два, можно прямо в командной строке прописать путь к каждой из библиотек, используемых проектом, либо записать все нужные библиотеки в jar файл сразу. Пойдем по второму пути. Нам поможет еще один плагин: maven-assembly-plugin. В нем же можно и манифест с главным классом прописать.Устанавливается этот плагин так же в секцию <build> <plugins>…</plugins></build> :
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>my-maven-assembly-plugin</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>пакет/главный класс</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Может возникнуть вполне закономерный вопрос, а что это за новые секции в плагинах, что это такое? Ответы на эти вопросы находятся в документации к каждому плагину, на сайте разработчика каждого плагина.Но, без особой необходимости, я бы не рекомендовал сильно углубляться в описание плагинов. В большинстве случаев достаточно скопировать рекомендуемый код для подключения плагина.И работать дальше.
Теперь ваше приложение запустится без особых проблем. jar файл будет иметь все необходимое для своей работы. Минимальные настройки выполнены.