如何从 ant build 中的 .properties 文件中读取部分?

How to read section from .properties file in ant build?

我有包含变量=值的 .properties 文件,我想根据 environment/mode(DEV、QA、PROD)

覆盖其中的一些

我想根据部分从文件中读取属性。想要读取任何部分之外的所有默认属性,并且应该根据给定的部分名称覆盖一些属性,我可以在读取属性文件时从 ant 脚本传递这些名称。

---project.properties文件(可修改)---

#default
var1=val1
url=abc.xyz
un=un_default
pwd=pwd_default

#Mode prod
[PROD]
un=un_dev
pwd=pwd_prod
[PROD.END]

#Mode dev
[DEV]
url=xyz.dev
un=un_dev
pwd=pwd_dev
[DEV.END]

#Mode qa
[QA]
un=un_qa
pwd=pwd_qa
[QA.END]

------蚂蚁-----

<property environment="env" />
<echo>Mode : ${env.MODE} </echo>

<loadproperties srcfile="project.properties">
</loadproperties>

现在如何在读取属性文件时传递 ${env.MODE} 以便加载所有默认属性和 mode/section 属性,如果默认属性已经存在,则应在部分中按值覆盖。

Ant 有一个 "first read is the value approach",因此您不能读取默认值然后尝试覆盖;相反,您先阅读细节,然后阅读默认值,默认值不会替换任何已设置的内容。有一些方法可以解决这个问题,但更容易接受一次设置不会改变的方法。

无论如何我都不知道要读取文件的一部分。而是一般的做法是将每个dev/qa/prod放入单独的文件中,然后使用特定的模式构造文件名并读入。

这是我刚刚从我们的一个项目中提取的示例。这个想法是可以有一系列可以设置值的地方,在这种情况下允许根据用户名加上主机,仅用户或默认值进行调整:

<property environment="env" />
<property name="env.HOSTNAME" value="${env.COMPUTERNAME}" />

<property file="${user.name}-${env.HOSTNAME}-build.properties" />
<property file="${user.name}-build.properties" />
<property file="${basedir}/build.properties" />