2015-03-27 4 views
1

Я хотел бы упомянуть, что я относительно новичок в конфигурациях Maven.Maven: свойства профиля, используемые в разделе плагинов

Моя ситуация:

  • Я использую Maven 3.0.5 построить J2E приложению
  • приложение развертывается в четырех различных средах: в местном, Dev, испытания и прод
  • Я использую Maven профили для настроить конфигурацию для конкретной среды
  • Я определил эти конфигурации в файлах properties в файловой системе.

Это файловая система для тех, кто:

<my-project-root> 
---profiles 
------local 
---------app.properties 
------dev 
---------app.properties 
------test 
---------app.properties 

я загрузить соответствующий файл свойств со следующей логикой в ​​моем pom.xml:

<profiles> 
    <profile> 
     <id>local</id> 
     <!-- The development profile is active by default --> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build.profile.id>local</build.profile.id> 
     </properties> 
    </profile> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <build.profile.id>dev</build.profile.id> 
     </properties> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <build.profile.id>prod</build.profile.id> 
     </properties> 
    </profile> 
    <profile> 
     <id>test</id> 
     <properties> 
      <build.profile.id>test</build.profile.id> 
     </properties> 
    </profile> 
</profiles> 
<build> 
    <finalName>MyProject</finalName> 
    <plugins> 
    </plugins> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
     <resource> 
      <directory>profiles/${build.profile.id}</directory> 
     </resource> 
    </resources> 
</build> 

С помощью этой конфигурации можно использовать соответствующие свойства для моего текущего профиля почти везде. Везде, но раздел <plugins>. Я бы очень хотел загрузить, например, свой URL-адрес базы данных или учетные данные из таких файлов свойств, но если я их включу в app.properties, они не будут оцениваться в разделе плагинов (например, я получаю значение ${endpoint} в качестве конечной точки базы данных).

Как получить свойства, загруженные из файлов для профиля, доступные в разделе <plugins>?

PS: Да, если я добавлю эти свойства непосредственно в pom.xml в качестве свойств под тегом <profiles>, они доступны, но я предпочитаю хранить свои пароли у pom.

+0

Если вы вводите пароли в 'pom.xml' является единственным препятствием, свопите их с путями к файлам паролей (или просто имена файлов относительно некоторого известного местоположения, чтобы уменьшить утечку). –

+0

@VictorSorokin правдоподобно. Тем не менее я ищу оптимальное решение. Если я поместил их в файлы, тогда мне нужна логика, чтобы их где-то их читать, не так ли? –

+0

Если у меня есть правильная задача, «maven-resources-plugin» позволит вам поместить значения свойств для каждого профиля в файл шаблона, который обрабатывается позже: http://portofino.manydesigns.com/en/docs/portofino3/tutorials/using-maven-profiles-and-resource-filtering –

ответ

1

Я смог сделать то, что хотел. Я использовал properties-maven-plugin, связанный, скажем this answer.

Что я сделал следующее:

  • Я добавил properties-maven-plugin читать файлы мне нужно было нагруженные

    <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>properties-maven-plugin</artifactId> 
        <version>1.0-alpha-2</version> 
        <executions> 
        <execution> 
         <phase>initialize</phase> 
         <goals> 
         <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
         <files> 
          <file>profiles/${build.profile.id}/app.properties</file> 
         </files> 
         </configuration> 
        </execution> 
        </executions> 
    </plugin> 
    

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

  • Мне также нужно удалить эту ошибку, указанную выше, для меня в Eclipse (Plugin execution not covered by lifecycle configuration). Для этого я выполнил инструкции из following post.

С этими шагами необходимые мне свойства стали доступными для плагинов, которые использовали их.

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