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

问题描述 投票:0回答:1

我有.properties文件,其中包含variables = values,我想基于环境/模式(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},以便加载所有默认和模式/部分属性,如果默认值已经存在,那么应该按部分中的值覆盖。

java build properties ant antbuilder
1个回答
3
投票

Ant有一个“首先读取是值的方法”,所以你不能读取默认值然后尝试覆盖;而是你阅读细节,然后是默认值,默认值不会替换已设置的任何内容。有一些方法可以解决这个问题,但更容易接受一次设置不会改变的方法。

无论如何我都不知道阅读文件的一部分。相反,该方法通常是将每个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" />
© www.soinside.com 2019 - 2024. All rights reserved.