【问题标题】:Import file content with maven filtering使用 Maven 过滤导入文件内容
【发布时间】:2019-09-24 05:27:57
【问题描述】:

我将 Spring 与 maven 与 Elasticsearch 存储库一起使用。我想设置一个同义词词典。

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

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

这工作正常。但是我的字典会很快变大。所以我想将 json 数组外部化到另一个文件并使用 Maven 过滤来替换内容文件。例如:

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

我想不出一个合适的解决方案。

Maven 似乎无法使用 json 属性文件进行过滤。我尝试使用 yaml 属性文件,但它不适用于多行,除非我明确使用 \ 换行,但它不便于维护。

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

提前谢谢你。

【问题讨论】:

    标签: maven spring-boot elasticsearch


    【解决方案1】:

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

    <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>
    

    【讨论】:

    • 谢谢!它可以完成工作,但我找到了另一种选择
    【解决方案2】:

    我找到了一个插件,可以处理具有多行值的 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",
         ...
      ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2022-01-16
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多