我在带有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属性文件,但是除非我明确使用\
来换行,否则它不适用于多行,但是对于可维护性而言并不方便。
谢谢。
答案 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",
...
]