Вакансия: младший Java программист
Небольшой компании разработчику ПО
требуется младший Java программист
Москва, м. Партизанская/ МЦК Окружная подробнее






Клуб Java разработчиков
Обсуждение интересных технологий
и новинок для Java разработчиков.
Москва, м. Партизанская подробнее






Основные сведения

Мавен изначально создавался , принимая во внимание портируемость. Но довольно часто приложение приходится запускать в разном окружении: например, для разработки используется одна база данных, в рабочем сервере используется другая. при этом могут понадобиться разные настройки, разные зависимости и плагины. Для этих целей в maven используются профайлы.

Давайте определим два профайла: один для разработки, другой для производственного сервера. Для разработки вполне подойдёт база hsqldb, которая хранит все данные в памяти. На производственном сервере же используется база данных postgres, которая сохраняет все данные на диск. В профайлах для каждой конфигурации определены свои проперти database.url и зависимости для разных jdbc драйверов.

Ниже приведён пример объявления таких профайлов.

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <profiles>
(1)     <profile>
            <id>development</id>
            <properties>
                <database.url>jdbc:hsqldb:mem:testdb</database.url>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.hsqldb</groupId>
                    <artifactId>hsqldb</artifactId>
                    <version>2.0.0</version>
                </dependency>
            </dependencies>
        </profile>
(2)     <profile>
            <id>productionServer</id>
            <properties>
                <database.url>jdbc:postgresql://databseserver/database</database.url>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>9.0-801.jdbc4</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
    .....
</project>
               

цифрами 1 и 2 обозначены начала объявления профайлов. каждый профайл имеет идентификатор в данном случае development и productionServer.

Внутри тэга <profile> содержатся все те же объявления что и внутри <project>: properties, dependencies, и др. Вот полный список тегов которые могут содержаться внутри профайлов:

 * <repositories>
 * <pluginRepositories>
 * <dependencies>
 * <plugins>
 * <properties>
 * <modules>
 * <reporting>
 * <dependencyManagement>
 * <distributionManagement>
 *  <build> тэг, который может содержать
         o <defaultGoal>
         o <resources>
         o <testResources>
         o <finalName>
 

Активация профайла

Чтобы содержимое тэга профайла "работало", нужно профайл активировать. Когда профайл активирован, его содержимое объединяется с основной частью pom.xml. Нужно заметить, что активных профилей одновременно может быть несколько.
Активировать профайл можно несколькими способами:
во первых, это можно задать вручную в командной строке запуска maven, например: mvn package -P production
Во вторых, при объявлении самого профайла можно задать тэг <activation>, который определяет какой профайл будет активирован: в нашем примере профайл development активный по умолчанию: <activation><activeByDefault>true</activeByDefault></activation>. Кроме активации по умолчанию можно задать активацию на основе операционной системы, установленных переменных окружения, версии JDK.

В командной строке можно задать, какие профили будут деактивированы: mvn goal -P !profile-1,!profile-2 //приоритет командной строки выше

Активные профайлы можно также задать в ~/.m2/settings.xml


                <settings>
                  ...
                  <profiles>
                    <profile>
                      <id>appserverConfig</id>
                      <properties>
                        <appserver.home>/path/to/appserver</appserver.home>
                      </properties>
                    </profile>
                  </profiles>

                  <activeProfiles>
                    <activeProfile>appserverConfig</activeProfile>
                  </activeProfiles>
                  ...
                </settings>

Отладка

Чтобы проверить работу и, возможно, найти ошибки, полезны следующие плагины:

  • для того, чтобы показать какие профайлы сейчас активны, можно набрать:
    mvn help:active-profiles
    причём опции командной строки принимаются во внимание. команда
    mvn help:active-profiles -P productionServer,development
    выведет, как и положено
    The following profiles are active:
                     - development (source: pom)
                     - productionServer (source: pom)
  • Также можно посмотреть pom, полученный после объединения основной части и активных профайлов:
    mvn help:effective-pom -P productionServer






blog comments powered by Disqus