外部化DEFAULT配置属性

时间:2013-02-06 09:25:43

标签: java properties groovy configuration-files gradle

许多项目正在使用配置文件和 我发现了很多帖子如何阅读这些配置文件,如何外化它们,但我找不到任何关于如何生成示例配置文件的信息。

例如,如果您的 company.config 文件已包含所有类型的配置属性,我希望自动生成 company.sample.config 文件每次我构建项目时从我的源代码。此示例文件应包含项目使用的所有配置属性,以及默认值和注释。

我使用Java和Gradle,所以我在考虑使用Gradle插件。

那里有类似的东西吗?其他人如何解决这个问题?


  

后来的编辑:一些例子:


public class CompanyConfig {
private static final String PROPERTY1_DEFAULT = "Company.property1_default";
private static final String PROPERTY2_DEFAULT = "Company.property2_default";

/**
 * description 1
 */
private static final String PROPERTY1 = "Company.property1";
/**
 * description 2
 */
private static final String PROPERTY2 = "Company.property2";

private Config config;

public CompanyConfig(Config config) {
    this.config = config;
}

public String getProperty1() {
    return config.getProperty(PROPERTY1, PROPERTY1_DEFAULT);
}

public String getProperty2() {
    return config.getProperty(PROPERTY2, PROPERTY2_DEFAULT);
}
}

以上代码为基础,sample.conf文件应如下所示:

**description 1
*Company.property1=Company.property1_default

**description 2
*Company.property2=Company.property2_default

通过这种方式,我可以将sample.conf文件提供给想要配置项目的人。此人不知道我的项目中的配置属性,因此他/她需要一个属性列表和每个属性的默认值。并且因为引入了新的peoperties而删除了其他一些peoperties,所以必须在每次构建时生成示例文件。

希望这能澄清我在这里要求的内容。

2 个答案:

答案 0 :(得分:1)

您可以获取ant build脚本的帮助。请参考以下代码。

<project>
<target name="default">



<propertyfile file="company.sample.config" comment="sample properties here.">

<entry key="program.AUTHOR" default="RAIS" />
<entry key="program.COMPANY" default="IGT" />
<entry key="program.COPYRIGHT" default="now" type="date" pattern="yyyy" />
<entry key="program.DESCRIPTION" default="" />
<entry key="program.VERSION" default="1.0.0" />
<entry key="program.BUILDNUM" value="1" />
<entry key="program.BUILDDATE" type="date" value="now" pattern="yyyyMMDDHHmmss" />
</propertyfile>

</target>
</project>

答案 1 :(得分:0)

我不知道有哪个插件可以做到这一点但是如果你有一个不错的配置系统那么它应该不难做到。例如,我使用基于JSON的配置系统:配置文件是一个简单的JSON文档,它直接映射到配置对象。要使用默认值生成示例配置,您只需实例化基础对象并让JSON将其写出来,这是一个五行程序,可以很容易地添加到构建脚本中。