如何使mawe属性可用于dropwizard yaml文件

时间:2017-09-25 18:58:56

标签: java maven swagger dropwizard

我正在使用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上看到任何变化

1 个答案:

答案 0 :(得分:0)

我提出了以下解决方案。总之,使用Maven resource filtering使用Maven属性填充属性文件。然后在应用程序中加载这些属性并将其设置为系统属性。最后,使用系统属性将Dropwizard配置为YAML中的substitute variables

假设我们试图在YAML中替换的变量称为project.version

  1. src/main/resources中创建属性文件。在此示例中,我将其称为maven.properties
  2. maven.properties中添加属性project.version=${project.version}
  3. 在你的pom的构建部分,添加:

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    
  4. 创建使用系统属性作为查找源的org.apache.commons.lang3.text.StrSubstitutor实现:

  5.     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());
             }
         }
    
    1. 在您的主要Application类中,将以下内容添加到initialize
    2.     @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);
          }