Разберем что такое плагин.Плагин это такие скромные программы, которые расширяют функционал основной программы.
Плагины прописываются в 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 файл будет иметь все необходимое для своей работы. Минимальные настройки выполнены.