我正在尝试为项目创建属性文件。项目可以使用不同的数据库(Oracle或Mssql,但不能同时使用两者)因此,我制作了3个属性文件:
common.properties
mssql.properties
oracle.properties
我想使用ant属性层次结构功能来设置一些属性。例如,我可以在common.properties:中定义
db.hostname= localhost
db.port= 1433
然后在mssql\oracle.prrties文件上,我可以构建
db.connectionString= jdbc:sqlserver://${db.hostname}:${db.port}
在我的build.xml上我写过:
<property file="common.properties"/>
为了设置具体的DB,我在CMD:上写道
Ant-1.8.4binant -propertyfile mssql.properties
问题是ant没有使用我在common.properties中定义的引用int要解析的顺序:
db.connectionString
如何使用cmd解决此问题?
问题在于创建属性的顺序。在执行ANT脚本之前,首先加载文件"mssql.properties"。这解释了为什么为属性"db.connectionString"分配字符串"${db.hostname}"one_answers"${db.port}",因为这些属性没有值。当脚本运行并加载第二个属性文件时,将设置它们的值。
另一种方法是使用一个属性来指示数据库类型。
示例
├── build.xml
├── common.properties
└── mssql.properties
按以下运行
$ ant -Ddb=mssql
Buildfile: /home/mark/tmp/build.xml
echo:
[echo] db.connectionString=jdbc:sqlserver://localhost:1433
build.xml
<project name="demo" default="echo">
<property file="common.properties"/>
<property file="${db}.properties"/>
<target name="echo">
<echo message="db.connectionString=${db.connectionString}"/>
</target>
</project>
用于额外信贷
这种方法还可以在没有指定正确的数据库类型的情况下进行错误检查:
<project name="demo" default="echo">
<property file="common.properties"/>
<property file="${db}.properties"/>
<available property="db.prop.file" file="${db.properties}"/>
<target name="echo">
<fail message="Missing a property file for a ${db} database" unless="db.prop.file"/>
<echo message="db.connectionString=${db.connectionString}"/>
</target>
</project>