Установите активный профиль весны из pom.xml и интеграцию с IDE

Я работаю над mavenized веб-приложением Java Spring. Мы широко используем автоматический перезапуск и горячее развертывание в Eclipse IDE, но я заметил, что интеграция в Eclipse не очень хороша, когда вы начинаете смешивать конфигурацию maven и spring. Мы хотели бы иметь переменные maven в web.xml, которые будут заменены во время сборки проекта плагином maven-war-plugin.

Переменная Maven в web.xml:

 <env-entry>
  <env-entry-name>spring.profiles.active</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>${profileName}</env-entry-value>
 </env-entry>

и переменные maven заменяются maven-war-plugin в процессе сборки:

        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>    
            <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
            </configuration>
        </plugin>

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

Считаете ли вы, что это хорошая практика, есть ли способ беспрепятственно работать в eclipse с этой конфигурацией?

Я буду использовать, например. Плагин maven jetty для запуска из IDE, однако мне не нравится работать с консолью в окне оболочки - консоль eclipse немного удобнее.


person Martin V.    schedule 08.04.2013    source источник


Ответы (1)


Фильтрация токенов через сборку maven не работает с горячим развертыванием eclipse.

Один из вариантов — передать -Dspring.profiles.active="dev" процессу JVM/App.

Я предпочитаю использовать переменную env для управления загрузкой профиля. Например, MY_PROJECT_ENV=dev.

Следующий код считывает переменную и инициализирует профиль.

public class ProfileInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    public void initialize(ConfigurableApplicationContext applicationContext) {
        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        environment.setActiveProfiles(System.getProperty("MY_PROJECT_ENV"));
    }
}
person Bhushan Bhangale    schedule 08.04.2013