Импортировать содержимое файла с помощью фильтрации maven - PullRequest
0 голосов
/ 06 мая 2019

Я использую Spring с Maven с хранилищем Elasticsearch.Я хотел бы установить словарь синонимов.

Итак, у меня есть settings.json in src/main/resources, который объявляет мои синонимы.

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

Это работает нормально.Но мой словарь будет увеличиваться очень быстро.Поэтому я хотел бы перенести массив json в другой файл и использовать фильтрацию Maven вместо файла содержимого.Например:

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

Я не могу найти правильное решение.

Кажется, что Maven не работает с файлом свойств json для фильтрации.Я пытался использовать файл свойств yaml, но он не работает с многострочными, если я явно не использую \ для разрыва строки, но это не удобно для удобства обслуживания.

  • Так что кто-нибудь уже сталкивался с этой проблемой?
  • Есть ли способ импортировать содержимое файла в другой файл?
  • Можно ли объявить свойство maven и установить значение из содержимого файла?
  • Есть ли другое решение, которое яне задумывался?
  • Или, может быть, кто-то знает, как загрузить синонимы в Elasticsearch с Spring?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Я не думаю, что вы можете сделать это с помощью встроенной фильтрации ресурсов 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>
0 голосов
/ 07 мая 2019

Я нашел плагин, который обрабатывает свойства 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",
     ...
  ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...