使用列表进行Maven概要文件过滤

使用列表进行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

我正在使用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-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需要启用,以便在文件中使用计算值