我使用ant安装服务器进行测试。 在属性文件中,我有一个数据库参数列表。 问题是我需要在更改数据库时更改5-6个参数。 其中大多数取决于数据库名称。所以我认为我创建了一个包含我们使用的所有不同数据库的xml文件,只需在属性文件中输入名称即可。 然后,当构建文件运行时,它将获取所用数据库的正确属性。 我创建了一个像这样的xml文件:
<databases>
<database>
<server>mssql_1</server>
<port>1433</port>
<sid_instance>foobar</sid_instance>
<path></path>
<hostuser>sa</hostuser>
<hostpwd>password</hostpwd>
</database>
<database>
<server>oracle_1</server>
<port>1521</port>
<sid_instance>foobar</sid_instance>
<path>C:\\oracle\\oradata\\foobar</path>
<hostuser>system</hostuser>
<hostpwd>password</hostpwd>
</database>
</databases>
我用我的构建文件调用该文件:
<xmlproperty file="databases.xml" />
因此,当我的属性文件声明要使用“mssql_1”时,我希望加载匹配的属性。
但是无论我如何尝试选择正确的数据,当我尝试
时,我会得到所有端口:“1433,1521”<echo message="${databases.database.port}">
我已经找到了不同的方法来做到这一点,但我找不到办法做到这一点。 但似乎应该是一件容易的事情....
答案 0 :(得分:3)
您的属性文件有两个具有相同值的实体。 <xmlproperty>
任务读取整个XML文件,然后使用实体设置属性名称。如果您碰巧有两个具有相同属性的实体,那么该特定属性的值将同时存在。
大多数人所做的是为每个数据库都有一个单独的属性文件,然后使用<property>
任务和file
参数来读取该特定属性文件。所以你应该有两个属性文件:
server=mssql_1
port=1433
sid_instance=foobar
path=
hostuser=sa
hostpwd=password
server=oracle_1
port=1521
sid_instance=foobar
path=C:/oracle/oradata/foobar
hostuser=ssytem
hostpwd=password
然后,在您的build.xml
文件中,您根据数据库读取了一个且只有一个属性文件:
<property name="database" value="mssql"/> <!-- Default database -->
<property name="database.file value="database.${database}.properties"/>
<fail message="No such database file "${database.file}"">
<condition>
<not>
<available file="${database.file} type="file"/>
</not>
</condition>
</fail>
<property file="${database.file}"/>
当有人运行Ant时,他们可以使用-D
参数来设置数据库:
$ ant -Ddatabase=oracle
这将覆盖database
文件中的build.xml
属性并使用Oracle数据库。如果未指定数据库,则将使用默认数据库(MS SQL)。
并且,如果另一个属性文件指定属性文件名:
,这也将起作用<property file="build.properties"> <!-- Contains database name -->
<property name="database.file" value="database.${database}.properties"/>