使用maven筛选导入文件内容
我将Spring与maven一起使用,并使用Elasticsearch存储库。我想建立一本同义词词典 所以我在使用maven筛选导入文件内容,maven,spring-boot,
elasticsearch,Maven,Spring Boot,
elasticsearch,我将Spring与maven一起使用,并使用Elasticsearch存储库。我想建立一本同义词词典 所以我在src/main/resources中有一个settings.json,它声明了我的同义词 { "synonym" : { "type" : "synonym", "synonyms" : ["finally,all", "slap,done", ...] } ) 这很好用。但是我的字典将很快扩大。因此,我想将json数组外部化到另一个文件中,并使用Maven
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资源筛选来实现这一点。但这可以通过一个简单的内联Groovy脚本完成,您可以通过Groovy maven插件调用该脚本。如下所示:
<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>
org.codehaus.gmaven
groovy maven插件
替换同义词
执行
过程资源
def synonyms=新文件(“${basedir}/src/main/resources/synonyms.txt”).getText('UTF-8')
def template=新文件(“${basedir}/src/main/resources/settings.json”).getText('UTF-8')
def result=template.replace(“@synonyms@”,同义词)
新文件(“${basedir}/target/settings.json”).write(结果为“UTF-8”)
我发现了一个插件,可以处理具有多行值的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",
...
]