Maven: свойства на основе профиля, используемые в разделе плагинов

1

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

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

  • Я использую Maven 3.0.5 для создания приложения J2E
  • приложение развертывается в четырех различных средах: локальном, dev, test и prod
  • Я использую профили 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 их в app.properties они не будут оцениваться в разделе плагинов (например, я получаю значение ${endpoint} качестве конечной точки базы данных).

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

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

  • 0
    Если pom.xml паролей в pom.xml является единственным препятствием, поменяйте их местами с путями к файлам паролей (или просто именами файлов относительно некоторого известного места, чтобы уменьшить утечку).
  • 0
    @VictorSorokin правдоподобно. Тем не менее, я ищу самое ближайшее решение. Если я помещу их в файлы, тогда мне нужна логика, чтобы где-то их прочитать, верно?
Показать ещё 2 комментария
Теги:
maven
maven-3
maven-profiles

1 ответ

1
Лучший ответ

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

Я сделал следующее:

  • Я добавил 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). Чтобы сделать это, я выполнил инструкции из следующей публикации.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню