我正在使用swagger包来记录我的dropwizard资源。以下是yaml文件
swagger:
resourcePackage: "com..resources"
description: "<a href='http:/docsite/'>Workflow doc</a>"
version: ${project.version}
我想动态更新POM文件中的versin编号,我尝试使用maven资源过滤
<resources>
<resource>
<directory>src/main/resources/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
这不会评估项目版本。我知道评估发生在最终位于项目的/ target / classes中的文件中。
如何在我的yaml文件中使用此maven属性?
我也在我的应用程序类中尝试了以下内容
SwaggerBundleConfiguration swaggerConfig = configuration.getSwaggerBundleConfiguration();
swaggerConfig.setVersion("${project.version}");
将资源过滤更改为
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
</resource>
</resources>
但是我没有在UI上看到任何变化
答案 0 :(得分:0)
我提出了以下解决方案。总之,使用Maven resource filtering使用Maven属性填充属性文件。然后在应用程序中加载这些属性并将其设置为系统属性。最后,使用系统属性将Dropwizard配置为YAML中的substitute variables。
假设我们试图在YAML中替换的变量称为project.version
:
src/main/resources
中创建属性文件。在此示例中,我将其称为maven.properties
。maven.properties
中添加属性project.version=${project.version}
在你的pom的构建部分,添加:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
创建使用系统属性作为查找源的org.apache.commons.lang3.text.StrSubstitutor
实现:
package com.example.app;
import org.apache.commons.lang3.text.StrLookup;
import org.apache.commons.lang3.text.StrSubstitutor;
/**
* A custom {@link StrSubstitutor} using system properties as lookup source.
*/
public class SystemPropertySubstitutor extends StrSubstitutor {
public SystemPropertySubstitutor() {
super(StrLookup.systemPropertiesLookup());
}
}
initialize
: @Override
public void initialize(final Bootstrap<AppConfiguration> bootstrap) {
final Properties properties = new Properties();
try {
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("maven.properties"));
System.setProperty("project.version", properties.getProperty("project.version"));
} catch (IOException e) {
throw new IllegalStateException(e);
}
final StrSubstitutor substitutor = new SystemPropertySubstitutor();
final ConfigurationSourceProvider configSourceProvider = new SubstitutingSourceProvider(bootstrap.getConfigurationSourceProvider(), substitutor);
bootstrap.setConfigurationSourceProvider(configSourceProvider);
}