Ant -propertyfile从cmd解析

时间:2013-08-20 07:46:53

标签: ant

我正在尝试为项目创建属性文件。 项目可以使用不同的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解决此问题?

1 个答案:

答案 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

的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>