Общий вид pom-файла

Структура проекта описывается в файле pom.xml, который должен находиться в корневой папке проекта. Содержимое проектного файла имеет следующий вид:

<project>
        <!—Описание текущего проекта -->
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <packaging>...</packaging>
        <version>...</version>


        <properties>
            <!-- Секция свойств -->
        </properties>

        <repositories>
            <!-- Секция репозиториев -->
        </repositories>


        <dependencies>
            <!-- Секция зависимостей -->
        </dependencies>

        <build>
            <!-- Секция сборки -->
        </build>
</project>

Не все секции могут присутствовать в описании pom.xml. Так секции properties и repositories часто не используются. Параметры описания текущего проекта являются обязательными. Про последнюю секцию мы сейчас и поговорим.

Секция build

Секция build не является обязательной – Maven умеет собирать проект и без нее. Но если ты хочешь настроить сборку более-менее сложного проекта, то понимание как там все устроено тебе пригодится.

Давай рассмотрим простой пример:

  <build>
        <finalName>projectName</finalName>
        <sourceDirectory>${basedir}/src/java</sourceDirectory>
        <outputDirectory>${basedir}/targetDir</outputDirectory>
        <resources>
                <resource>
                <directory>${basedir}/src/java/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                </includes>
                </resource>

        </resources>
        <plugins>
                . . .
        </plugins>
    </build>

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

Основных тегов тут четыре:

  • <finalName>
  • <sourceDirectory>
  • <outputDirectory>
  • <resources>

Кратко разберем их назначение:

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

Тег <sourceDirectory> позволяет переопределить месторасположения файлов с исходным кодом. По умолчанию файлы располагаются в директории ${basedir}/src/main/java, но можно указать и любое другое место.

Тег <outputDirectory> задает директорию, куда компилятор будет сохранять результаты компиляции – *.class файлы. По умолчанию определено значение target/classes.

Тег <resources> и вложенные в нее тэги <resource> определяют местоположение файлов ресурсов. Файлы ресурсов при сборке просто копируются в директорию outputDirectory. Значение по умолчанию директории с ресурсами равно src/main/resources.

Секцию сборки можно настраивать особенно гибко. Подробнее мы рассмотрим ее немного позже.