2017-09-25 48 views
2

我正在使用swagger包來記錄我的dropwizard資源。以下是YAML文件如何使maven屬性可用於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/classes中的文件中。

如何在我的yaml文件中使用這個maven屬性?

我也試過在我的應用程序班組長

SwaggerBundleConfiguration swaggerConfig = configuration.getSwaggerBundleConfiguration(); 
    swaggerConfig.setVersion("${project.version}"); 

的follwing並改變資源濾波

但是,我看到

回答

0

我想出了UI的任何變化以下解決方案。總之,使用Maven resource filtering使用Maven屬性填充屬性文件。然後在應用程序中加載這些屬性並將它們設置爲系統屬性。最後,使用系統屬性在YAML中將Dropwizard配置爲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實現:

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. I n您的主要應用類別,請將以下內容添加到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); 
    }