0

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

4

1 回答 1

0

问题是创建属性的顺序。在执行 ANT 脚本之前,首先加载文件“mssql.properties”。这就解释了为什么属性“db.connectionString”被分配了字符串“${db.hostname}”和“${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

构建.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>
于 2013-08-20T19:47:25.973 回答