Maven: как заполнить переменную в файле web.xml

Я работаю в веб-проекте Maven через Eclipse. в web.xmlУ меня есть context-param, значение которого должно меняться в зависимости от профиля, который я использую при запуске Maven.

<context-param>
    <param-name>producao</param-name>
    <param-value>${ambiente.producao}</param-value>
</context-param>

В файле pom для проекта у меня есть следующая конфигурация:

<project>

    <profiles>
        <profile>
            <id>prod</id>
            <properties>
                <ambiente.producao>true</ambiente.producao>
            </properties>
        </profile>
        <profile>
            <id>desenv</id>
            <properties>
                <ambiente.producao>false</ambiente.producao>
            </properties>
        </profile>
    </profiles>

    <build>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/webapp/WEB-INF/</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/web.xml</include>
                </includes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <webResources>
                        <resource>
                            <filtering>true</filtering>
                            <directory>src/main/webapp</directory>
                            <includes>
                                <include>**/web.xml</include>
                            </includes>
                        </resource>
                    </webResources>
                    <warSourceDirectory>src/main/webapp</warSourceDirectory>
                    <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>

    </build>

</project>

Я использую оба resources пометьте как плагин maven-war-plugin согласно ссылкам, которые я нашел в интернете. Однако это не сработало, как ожидалось. В Eclipse я запускаю maven с целями чистой установки и как "Профили" либо prod, либо desenv. После запуска Maven я заметил, что в web.xml, ${ambiente.producao} имущество не заменяется. Поэтому я хотел бы знать, что я сделал не так. Должен ли я использовать только фильтрующий ресурс или maven-war-plugin?

Спасибо,

Рафаэль Афонсо

1 ответ

Решение

Не верьте всему, что читаете в Интернете. Вы должны удалить src/main/webapp/WEB-INF/ из списка ресурсов, он просто отфильтрует ваш web.xml в target/classes

Ваш maven-war-plugin Конфигурация просто необходима:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.5</version>
  <configuration>
    <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
  </configuration>
</plugin>

Теперь, независимо от того, используете ли вы Maven CLI или Eclipse, вам нужно включить один из этих профилей. В командной строке вам нужно запустить

мвн чистый пакет -Пдесенв

В Eclipse (если вы используете дистрибутив Luna Java EE или более новый), вы можете включить нужный вам профиль, нажав Ctrl+Alt+P, Если вы включите desenvвы увидите отфильтрованный web.xml под target/m2e-wtp/web-resources/WEB-INF/ Это файл, который будет опубликован на вашем сервере приложений.

Если вам случится включить оба профиля одновременно, последний профиль, указанный в вашем файле pom.xml, имеет приоритет.

Лично я бы удалил производственный профиль и поместил производственные свойства в раздел свойств по умолчанию вашего pom.xml. Таким образом, вы всегда фильтруете свой web.xml по фактическим значениям, и у вас будет меньше шансов случайно собрать и развернуть приложение с непроизводственными настройками.

И для того, чтобы включить desenv профиль автоматически в Eclipse, вы можете добавить следующее правило активации:

<profile>
  <id>desenv</id>
  <!-- This profile is only activated when building in Eclipse with m2e -->
  <activation>
    <property>
      <name>m2e.version</name>
    </property>
  </activation>
  <properties>
    <ambiente.producao>false</ambiente.producao>
  </properties>
</profile>

Подробнее о поддержке динамической фильтрации ресурсов в m2e-wtp здесь: https://developer.jboss.org/en/tools/blog/2011/05/03/m2eclipse-wtp-0120-new-noteworthy

И там есть скринкаст: http://screencast.com/t/hwodHqODBB

Другие вопросы по тегам