Статьи

Подготовка сервера в Maven и некоторые новые полезные плагины

Иногда в проектах бывает, что существуют различные этапы, и каждый этап требует своей конфигурации, а также есть несколько общих конфигураций. Эти этапы могут быть такими:

  • локальный (машина разработчика)
  • Тест (TST)
  • Пользовательский приемочный тест (UAT)
  • Тест производительности (POT)
  • Производство (PRD)
  • и так далее

Обычно эти конфигурации происходят в основном с помощью файлов свойств. 

То, как мы реализовали, было похоже на отдельный проект maven, который мы называем «Свойства». Потом:

Шаг 1

Для каждого этапа сервера (кроме общего) мы создали профиль maven. Поэтому, когда мы запускаем какие-либо команды maven, мы передаем сценическое имя. По умолчанию  локальный является активным профилем. 

Шаг 2

Теперь, как мы добавляем содержимое определенной стадии в путь к классу? Это очень просто. Существует очень полезный плагин под названием: build-helper-maven-plugin, который поможет вам.

Следовательно, каждый профиль maven будет выглядеть так:

        <profile>
            <id>local</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <env>local</env>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>1.7</version>
                        <executions>
                            <execution>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>add-resource</goal>
                                </goals>
                                <configuration>
                                    <resources>
                                        <resource>
                                            <directory>src/main/java/local</directory>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>tst</id>
            <properties>
                <env>tst</env>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>1.7</version>
                        <executions>
                            <execution>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>add-resource</goal>
                                </goals>
                                <configuration>
                                    <resources>
                                        <resource>
                                            <directory>src/main/java/tst</directory>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

То, как мы работали с общими конфигурациями, было показано ниже в основном теге сборки:

        <resources>
            <resource>
                <directory>src/main/java/common</directory>
            </resource>
        </resources>		

Теперь есть две проблемы (насколько я понял):

  1. Если в общем файле есть какой-либо файл, то одно и то же точное имя не должно быть на всех этапах. Например, если у нас есть: common / log4j.xml, у нас никогда не должно быть tst / logj4.xml
  2. Предположим, у нас есть local / webServicesAddress.properties, поэтому (A) если у нас есть этапы, такие как PRD или другие, у них тоже должен быть один и тот же файл, (B) все ключевые записи этих файлов свойств также должны быть доступны на каждом этапе.

Мне не удалось найти готовый плагин maven, который помог бы мне проверить эти проблемы и сделать его ошибкой уровня компиляции, поэтому мы разработали следующие плагины:


Использование очень просто, как это:
        <plugins>
            <plugin>
                <groupId>com.maven.plugins</groupId>
                <artifactId>CommonResourcesValidator</artifactId>
                <version>1.0</version>
                <configuration>
                    <commonResourceDirectory>${basedir}/src/main/java/common</commonResourceDirectory>
                    <environmentsDirectory>
                        <local>${basedir}/src/main/java/local</local>
                        <prd>${basedir}/src/main/java/prd</prd>
                        <tst>${basedir}/src/main/java/tst</tst>
                    </environmentsDirectory>
                </configuration>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>commonResourcesValidateMojoGoal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.maven.plugins</groupId>
                <artifactId>MultiEnvironmentResourcesValidator</artifactId>
                <version>1.0</version>
                <configuration>
                    <environments>
                        <param>${basedir}/src/main/java/local</param>
                        <param>${basedir}/src/main/java/prd</param>
                        <param>${basedir}/src/main/java/tst</param>
                    </environments>
                    <master>local</master>
                    <excludes>
                        <param>**\.svn\**</param>
                        <param>mock.properties</param>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>multiEnvironmentResourcesValidatorGoal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

Конфигурация плагина CommonResourcesValidator:

  • commonResourceDirectory указывает, какая папка ресурса определяет общие ресурсы
  • environmentDirectory — список этапов

Конфигурация плагина MultiEnvironmentResourcesValidator:

  • среда определяет этапы, которые должны быть проверены
  • мастер определяет, какой этап должен быть выбран как мастер, чтобы проверить другие этапы по сравнению с ним
  • исключает определить, какие файлы должны быть исключены из этой проверки