7.1 Переменные в Maven – properties

Часто встречающиеся параметры Maven позволяет вынести в переменные. Это очень полезно, когда нужно чтобы в разных частях pom-файла параметры совпадали. Например, в переменную можно вынести версию Java, версии библиотеки, пути к определенным ресурсам.

Для этого есть специальная секция в pom.xml – <properties>, в ней и объявляются переменные. Общий вид переменной такой:

<имя-переменной>значение</имя-переменной>

Пример:

<properties>
    <junit.version>5.2</junit.version>
    <project.artifactId>new-app</project.artifactId>
    <maven.compiler.source>1.13</maven.compiler.source>
    <maven.compiler.target>1.15</maven.compiler.target>
</properties>

Для обращения к переменным используется другой синтаксис:

${имя-переменной}

Там, где написан такой код, Maven подставит значение переменной.

Пример:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
 
<build>
    <finalName>${project.artifactId}</finalName>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
        </configuration>
    </plugin>
</build>

7.2 Предопределенные переменные в Maven

При описании проекта в pom-файле можно использовать предопределенные переменные. Их можно условно разделить на несколько групп:

  • Встроенные свойства проекта;
  • Свойства проекта;
  • Настройки.

Встроенных свойств проекта всего два:

Свойство Описание
${basedir} корневой каталог проекта, где располагается pom.xml
${version} версия артефакта; можно использовать ${project.version} или ${pom.version}

На свойства проекта можно ссылаться с помощью префиксов «project» или «pom». Их у нас четыре:

Свойство Описание
${project.build.directory} «target» директория проекта
${project.build.outputDirectory} «target» директория компилятора. По умолчанию «target/classes»
${project.name} наименование проекта
${project.version} версия проекта

Доступ к свойствам settings.xml можно получить с помощью префикса settings. Имена могут быть любыми – берутся из settings.xml. Пример:

${settings.localRepository} задает путь к локальному репозиторию.