【问题标题】:How to read section from .properties file in ant build?如何从 ant build 中的 .properties 文件中读取部分?
【发布时间】:2019-08-16 23:57:57
【问题描述】:

我有带有变量=值的 .properties 文件,我想根据环境/模式(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】:

    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" />
    

    【讨论】:

    • 谢谢@kevino。正如你所说的不可能/难以阅读部分,我遵循了多文件方法并且工作正常。
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2011-08-24
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多