使用Maven过滤导入文件内容

时间:2019-05-06 14:46:55

标签: maven spring-boot elasticsearch

我在带有Elasticsearch存储库的Maven中使用Spring。我想设置一个同义词词典。

所以我在settings.json中有一个src/main/resources,用于声明我的同义词。

{
  "synonym" : {
    "type" : "synonym",
    "synonyms" : ["finally,all", "slap,done", ...]
  }
) 

这很好。但是我的字典很快就会增加。所以我想将json数组外部化为另一个文件,并使用Maven过滤将其替换为内容文件。例如:

{
  "synonym" : {
    "type" : "synonym",
    "synonyms" : @synonyms@
  }
) 

我无法找到合适的解决方案。

Maven似乎无法使用json属性文件进行过滤。我尝试使用yaml属性文件,但是除非我明确使用\来换行,否则它不适用于多行,但是对于可维护性而言并不方便。

  • 那么有没有人遇到过这个问题?
  • 是否可以将文件内容导入另一个文件?
  • 我可以声明maven属性并从文件内容中设置值吗?
  • 还有没有想到的其他解决方案吗?
  • 或者也许有人知道如何使用Spring将同义词上传到Elasticsearch?

谢谢。

2 个答案:

答案 0 :(得分:1)

我认为您无法使用内置的Maven资源过滤来做到这一点。但这可以通过您通过groovy-maven-plugin调用的简单内联Groovy脚本来完成。类似于以下内容:

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>groovy-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>replace-synonyms</id>
      <goals>
        <goal>execute</goal>
      </goals>
      <phase>process-resources</phase>
      <configuration>
        <source>
          def synonyms = new File("${basedir}/src/main/resources/synonyms.txt").getText('UTF-8')
          def template = new File("${basedir}/src/main/resources/settings.json").getText('UTF-8')
          def result = template.replace("@synonyms@", synonyms)
          new File("${basedir}/target/settings.json").write(result,'UTF-8')
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

答案 1 :(得分:0)

我找到了一个可处理具有多行值的yaml属性的插件:

<plugin>
     <groupId>it.ozimov</groupId>
     <artifactId>yaml-properties-maven-plugin</artifactId>
     <executions>
         <execution>
             <phase>initialize</phase>
              <goals>
                 <goal>read-project-properties</goal>
              </goals>
              <configuration>
                  <files>
                <file>${project.basedir}/src/main/resources/synonyms.yml</file>
                  </files>
               </configuration>
          </execution>
      </executions>
</plugin>

还有我的配置文件:

synonyms: >
  [
    "finally,all",
    "slap,done",
     ...
  ]