Необходимые плагины и настройки

Разберем что такое плагин.Плагин это такие скромные программы, которые расширяют функционал основной программы.

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