Фильтрация ресурсов Maven - явно укажите, какие файлы требуют внедрения свойств.

Допускает ли плагин ресурсов Maven гибкий способ исключения определенных файлов во время внедрения свойств профиля Maven?

  • Я не хочу исключать файлы из сборки, просто из фазы инъекции.

Проект, над которым я работаю, определяет уникальные профили Maven (и соответствующие свойства) в Settings.xml для каждой среды развертывания. Когда проект построен, происходят следующие шаги

  • POM проектов определяет папку ресурсов как цель для применения фильтрации ресурсов.
  • Папка ресурсов содержит файлы .XML и .PROPERTIES.
  • Во время mvn: развертывание Maven вводит свойства профиля в файл .PROPERTIES, как ожидалось
  • Maven также внедряет свойства профиля в файлы .XML. Это нежелательное поведение (эти файлы содержат заполнители, которые позволяют проекту гибко вводить значения во время развертывания приложения)

Плагин ресурсов предоставляет параметры конфигурации для определения параметров включения и исключения, однако выбор параметра исключения также исключает указанный файл из папки сборки, что нежелательно.

Возможно ли указать Maven, какие файлы следует заменить заполнителями?


person cdugga    schedule 04.12.2015    source источник
comment
Хорошо, я, вероятно, неправильно понял ваш вопрос, смешивая внедрение Maven с фильтрацией Maven, в то время как вы, вероятно, имели в виду профили, вводящие свойства в сборку среды выполнения. Однако с первого шага, о котором вы упомянули, вы применяете фильтрацию, верно?   -  person A_Di-Matteo    schedule 04.12.2015


Ответы (1)


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

Учитывая следующий образец POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sample</groupId>
    <artifactId>resources-example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <filters>
            <filter>src/main/filters/filter.properties</filter>
        </filters>

        <resources>
            <!-- configuring an additional resources folder: conf -->
            <resource>
                <directory>${project.basedir}/src/main/conf</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>*.txt</exclude>
                </excludes>
                <includes>
                    <include>*.properties</include>
                </includes>
                <targetPath>${project.basedir}/target</targetPath>
            </resource>
        </resources>
    </build>
</project>

Обратите внимание на раздел filters в разделе build. Здесь мы сообщаем Maven, где находится фильтр, обеспечивая замену заполнителей.

Обратите внимание на добавление <filtering>true</filtering> к новому ресурсу, настроенному впоследствии и связанному с шаблонами включения / исключения. Таким образом, Maven будет фильтровать только файлы * .properties этой папки.

Теперь src / main / conf может содержать файл conf.properties со следующим содержимым:

## add some properties here
[email protected]@
property.example2=${property.value2}

(Обратите внимание на заполнители в стиле ant и maven.)

В то время как src / main / filters (вам необходимо создать эту папку) содержит файл filter.properties со следующим содержимым:

property.value1=filtered-value1
property.value2=filtered-value2

Запустив сборку, вы получите файл conf.properties в каталоге target со следующим содержимым:

property.example=filtered-value1
property.example2=filtered-value2

Теперь, если ваш фильтр (имя файла) является свойством, введенным профилем, вы можете затем внедрить различные фильтры в зависимости от среды и нацеливаться только на определенные файлы.

person A_Di-Matteo    schedule 04.12.2015