Обработка файла свойств во время сборки

Мои требования следующие: - у нас есть четыре среды (dev, uat, prod, stag) - в настоящее время у нас есть 5 файлов свойств (например, log4j.properties), по одному для каждой среды, например: log4j_dev.properties, log4j_uat.properties, log4j_prod.properties, log4j_stag.properties
— все вышеперечисленные файлы имеют много общего, только в каждом файле различаются от 4 до 5 свойств.

мои текущие требования заключаются в том, что мы должны поместить все свойства в общий файл (например, log4j.properties), а файл, специфичный для среды, будет содержать только конкретное свойство от 4 до 5. во время сборки эти файлы должны быть объединены и должен быть создан новый файл, содержащий все эти свойства.

Я попробовал maven-config-processor-plugin, который отлично работает с mavne. 2, но он не совместим с maven3. В настоящее время мы используем maven3, поэтому мне нужен альтернативный подход. Есть ли альтернатива конфигурационному процессору maven или мне нужно написать какой-нибудь новый плагин maven для этого.

Любые предложения плз.


person Nitin Khola    schedule 11.09.2012    source источник
comment
Насколько я вижу на сайте плагина - это Совместимость с Maven 3. Можете объяснить, в чем проблема несовместимости?   -  person yegor256    schedule 11.09.2012
comment
Если вам требуется встроить определенные файлы конфигурации в войну, вы можете попробовать несколько запусков для военного плагина, это создает военные артефакты с полезным суффиксом: stackoverflow.com/questions/3866784/   -  person chrisinmtown    schedule 20.03.2017


Ответы (1)


Вы пытались использовать maven-resources-plugin и параметр фильтрации ресурсов?

Вот пример:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
    <execution>
        <id>copy-resources</id>
        <phase>validate</phase>
        <goals>
            <goal>copy-resources</goal>
        </goals>
        <configuration>
            <filters>
                <filter>src/main/filters/${target.filter}.properties</filter>
            </filters>
            <resources>          
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>src/test/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>              
        </configuration>            
        </execution>
    </executions>
</plugin>

Затем у вас есть каталог src/main/filters. Для каждой вашей среды вы добавляете filter_env.properties. В него вы кладете свой ключ, который хотите вариабилизировать, вот так

ys.client.service.port=8511
ys.client.service.url=http://localhost/yoda-client/service/yoda
ys.env=dev

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

ys.client.service.port=${ys.client.service.port}
ys.client.service.url=${ys.client.service.url}
ys.environment=${ys.env}
person yodamad    schedule 11.09.2012
comment
Спасибо Йодамад, это действительно полезно для меня. - person Nitin Khola; 11.09.2012