使用列表进行Maven概要文件过滤
我正在使用Maven过滤创建一个属性文件,该文件将具有给定堆栈的专用属性 我有一个application.properties文件,其属性如下使用列表进行Maven概要文件过滤,maven,filter,resources,Maven,Filter,Resources,我正在使用Maven过滤创建一个属性文件,该文件将具有给定堆栈的专用属性 我有一个application.properties文件,其属性如下 elasticsearch.members=${elasticsearch.members} 我有两个配置文件 config.ppd.properties,其中 elasticsearch.members=ppd-es-01:9700;ppd-es-02:9700;ppd-es-03:9700 elasticsearch.members=prod-e
elasticsearch.members=${elasticsearch.members}
我有两个配置文件
config.ppd.properties,其中
elasticsearch.members=ppd-es-01:9700;ppd-es-02:9700;ppd-es-03:9700
elasticsearch.members=prod-es-01:9700;prod-es-02:9700;prod-es-03:9700
具有以下属性的config.prod.properties
elasticsearch.members=ppd-es-01:9700;ppd-es-02:9700;ppd-es-03:9700
elasticsearch.members=prod-es-01:9700;prod-es-02:9700;prod-es-03:9700
我有两套别名为ppd es nn和prod es nn的服务器
这一切都很好。当我使用ppd配置文件生成工件时,我在application.properties文件中获得了正确的属性
elasticsearch.members=${environment}-es-[index]:9700;...
但我真正想做的是在application.properties文件中以某种方式进行连接。因此,我可以在application.properties文件中指定elasticsearch服务器的数量和模式
elasticsearch.members=${environment}-es-[index]:9700;...
我有什么办法可以做到这一点吗?可能是对进行过滤的类进行子类化?这个例子有点做作,因为我想保持简单。但我想做的一件事是将部署模式(蓝色或绿色)附加到每个服务器别名。虽然我可以在filter文件中这样做,但最好是在application.properties文件中这样做,这样filter类中的任何输入都不会弄乱别名。我喜欢groovy maven插件来完成这样的任务。下面的内容未经测试,但应该会给你一个想法
<properties>
<!-- these may be overridden on the cmdline -->
<target.env>ppd</target.env>
<es.server.count>2</es.server.count>
<properties>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version><latestPluginVersionHere></version>
<executions>
<execution>
<id>build-es-host-list</id>
<!-- phase must be earlier than process-resources -->
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
<![CDATA[
def sb = new StringBuilder()
def targetEnv = project.properties.getProperty('targetEnv')
def numServers = project.properties.getProperty('es.server.count')
(1..numServers).eachWithIndex { it, idx ->
sb.append("${targetEnv}-es-${idx}:9700")
if (idx < numServers) {
sb.append(';')
}
}
project.properties.setProperty('elasticsearch.members', sb.toString())
]]>
</source>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.12</version>
</dependency>
</dependencies>
</plugin>
POM需要启用,以便在文件中使用计算值