Apache Maven

Проработать

  1. Maven плагины для сборки проекта
  2. POM Reference
  3. Ответы на вопросы на собеседование Maven (часть 1)
  4. Руководство по Maven. Плагины
  5. Краткое знакомство с Maven
  6. Разница между Goals и Phases

Что это

Apache Maven - фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах pom.xml

Некоторые библиотеки добавляют необходимые им зависимости. Рекомендуется добавить все эти зависимости самостоятельно. Так как если библиотека не видит явной зависимости в pom.xml, она будет добавлена как неявная зависимость для новой библиотеки:

Основные разделы

Как работает

Maven использует модель определённых фаз (phase), к которым присоединяются определённые "цели" (goals).

Maven Lifecycle

Терминальные команды

Обновление зависимостей

mvn dependency:resolve
        

Структура pom.xml

Избежать дублирования библиотеки

Если несколько зависимостей использует зависимости на одну библиотеку с разными версиями. Для устранения дублирования кода нужно исключить обычно более старую версию.

Для удаления зависимых библиотек, которые вы не хотите нужно использовать 'exclusions' в блоке 'dependencies'.

Пример:

<exclusions>
    <exclusion>
        <artifactId>servlet-api</artifactId>
        <groupId>javax.servlet</groupId>
    </exclusion>
</exclusions>
        

Default properties

  1. maven.compiler.source - 5
  2. maven.compiler.target - 5

Maven scope(область видимости)

Scope - указывает область действия(этап жизненного цикла проекта), в котором эта зависимость будет доступна.

  1. compile - сборки, тестирования, зависимые пакеты, конечный пакет(будут доступны и во время исполнения).
  2. provided - сборки, тестирования, конечный пакет(будут доступны и во время исполнения).
  3. runtime - тестирования, зависимые пакеты, конечный пакет(будут доступны и во время исполнения).
  4. test - тестирования, зависимость будет "подсунута" maven-ом в проект, когда выполняется компиляция той части проекта, которая содержит тесты (src/test).
  5. system - область похожа на provided за исключением того, что необходимо определить физическое расположение артефакта на диске. Артефакт с этой областью видимости maven не ищет в репозитории.
  6. import - эта область используется в зависимости секции <dependencyManagement> при сложных связях.

Добавление Maven в проект через Intellij Idea

  1. Нажать на папку с проектом правой кнопкой мыши.
  2. Выбрать "Add Framework Support"
  3. Выбрать из списка Maven.

RELEASE and LATEST

Использование RELEASE или LATEST в указании версий, не рекомендуется. Так plugin который отвечает за это не всегда работает исправно. Необходимо указывать конкретную версию.

Maven plugin

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

compiler

Maven использует JAVA 5. Для plugin можно указать версию в настройках.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
    

jar

Плагин для сборки проекта в JAR файл, но без зависимостей.

assembly

Плагин аналогичен с "jar" плагином, но также добавляет все необходимые зависимости.