我正在尝试为项目创建属性文件。 项目可以使用不同的DB(Oracle或Mssql,但不能同时使用) 因为我已经制作了3个属性文件:
common.properties
mssql.properties
oracle.properties
我想使用ant属性层次结构功能来设置其中一些属性。 例如,我可以定义at,common.properties:
db.hostname= localhost
db.port= 1433
然后在mssql \ oracle.proprties文件中我可以构建
db.connectionString= jdbc:sqlserver://${db.hostname}:${db.port}
在我的build.xml上 我写道:
<property file="common.properties"/>
为了设置我在CMD上写过的具体数据库:
Ant-1.8.4\bin\ant -propertyfile mssql.properties
问题是ant不使用我在common.properties中定义的引用 int解决:
db.connectionString
如何使用cmd解决此问题?
答案 0 :(得分:0)
问题在于创建属性的顺序。在执行ANT脚本之前,首先加载文件“mssql.properties”。这解释了为什么属性“db.connectionString”被赋予字符串“$ {db.hostname}”和“$ {db.port}”,因为这些属性没有值。当脚本运行并加载第二个属性文件时,它们的值将被设置。
替代方法是使用属性来指示db类型。
├── build.xml
├── common.properties
└── mssql.properties
运行如下
$ ant -Ddb=mssql
Buildfile: /home/mark/tmp/build.xml
echo:
[echo] db.connectionString=jdbc:sqlserver://localhost:1433
<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>