Как сделать свойства maven доступными для файлов yaml dropwizard
Я использую пакет swagger для документирования своих ресурсов dropwizard. Ниже приводится файл yaml
swagger:
resourcePackage: "com..resources"
description: "<a href='http:/docsite/'>Workflow doc</a>"
version: ${project.version}
Я хочу динамически обновить номер версии из файла POM, для которого я попробовал фильтрацию ресурсов maven
<resources>
<resource>
<directory>src/main/resources/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
Это не оценивает версию проекта. Я понимаю, что оценка происходит в файлах, которые попадают в /target/ классы проекта.
Как я могу использовать это свойство maven в моем файле yaml?
Я также попробовал следующее в своем приложении classs
SwaggerBundleConfiguration swaggerConfig = configuration.getSwaggerBundleConfiguration();
swaggerConfig.setVersion("${project.version}");
И изменение фильтрации ресурсов на
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
</resource>
</resources>
Но я не вижу никаких изменений в пользовательском интерфейсе
1 ответ
Я придумал следующее решение. Итак, заполните файл свойств свойствами Maven, используя фильтрацию ресурсов Maven. Затем загрузите эти свойства в свое приложение и установите их как системные свойства. Наконец, настройте Dropwizard для замены переменных в YAML системными свойствами.
Предполагая, что переменная, которую мы пытаемся подставить в 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());
}
}
- В своем основном классе Application добавьте следующее к
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);
}