2014-12-19 4 views
5

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

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

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

<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-плагин войны-плагин по ссылкам, которые я нашел в Интернете. Однако это не сработало, как ожидалось. В Eclipse я запускаю maven с целями чистой установкой и как «Профили» либо prod или desenv. После запуска Maven я заметил, что в web.xml свойство ${ambiente.producao} не заменяется. Поэтому я хотел бы знать, что я сделал неправильно. Должен ли я использовать только ресурс фильтрации или плагин maven-war?

Спасибо,

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

ответ

16

Не верьте всему, что вы читаете в Интернете. Вы должны удалить SRC/главная/веб-приложение/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 вам нужно включить один из этих профилей. В командной строке, вам нужно запустить

МВН чистый пакет -Pdesenv

В 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> 

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

и А screencast есть: http://screencast.com/t/hwodHqODBB

+1

Это очень оптимальный и рациональный подход и объяснение. Благодаря! –

+1

Это был волшебный ключ: "filteringDeploymentDescriptors> true" –

Смежные вопросы