Обработка файла свойств во время сборки
Мои требования следующие:
- у нас есть четыре среды (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. во время сборки эти файлы должны быть объединены, и должен быть создан новый файл, содержащий все эти свойства.
Я пробовал http://code.google.com/p/maven-config-processor-plugin/ отлично работает с mavne 2, но не совместим с maven3 . В настоящее время мы используем maven3, поэтому мне нужен альтернативный подход. Есть ли альтернатива maven config-процессор или мне нужно написать новый плагин maven для этого.
Любые предложения плз.
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}