[
译
]
使用属性去控制构建(
Using Properties to Control a Build
)
----
取自
<<Pro Apache Ant>>
为了匹配一个复杂的工程,任何构建都可能变得复杂。但是,你也许不总是想要执行构建的每个部分,或者说如果条件满足的话,你也许想要仅仅执行某个特定的部分。当然你能够通过使用目标依赖来创建一个构建序列,这就意味着你能将目标链接起来。使用这个机制,你甚至能够集成条件,而这些条件会导致这个构建过程交叉起来,并且会创建不同的发布。例如,示例应用程序有一个
stand-alone
的
Java
客户端和基于
Web
的接口,尽管它们共享了数据库连接的代码。为这个应用程序的两个部分所做的构建起始于分离这两个部分前的共通代码,而分离取决于你所构建的是哪个部分。
下图显示了这种情形:
使用依赖来模拟这个构建过程是足够的简单。这样,你总是可以对
stand-alone
目标简单地设置
depends
特性(
attributes
)来依赖共通代码的构建。对于
Web
应用程序目标也是一样的。
一个可以替换的方案是使用
<target>
的最后两个特性:
if
和
unless
。这两个特性会影响到一个目标是否运行,并且运行与否会取决于属性。设置
if
到一个属性名意味着如果属性被设置了,那么目标应该会运行。设置
unless
到一个属性名意味着目标应该会运行除非该属性被设置了。而该属性有什么值并不重要,只要它被设置了。在
Ant
中不存在
null
。
NOTE
在
if
和
unless
特性中设置的值应该是一个属性名,不是该属性包含的值。不要使用
${ }
,除非你真的要设置一个属性名作为另一个属性的值。
如果
if
和
unless
都设置了相同的属性名,那么
if
会重载
unless
,尽管你没有绝对的理由想这么做。你也应该要意识到这些设置不会影响在
depends
特性中目标的运行。
但是,应用程序的构建并不总是这么简单。例如,你也许想要获取并构建第三方的库,只有当你没有它们时。这就意味着
Ant
将必须检查某个特定的文件是否存在
build
目录结构中;如果文件存在,那么
Ant
将跳过上图中的前两个步骤。这就带来了控制构建的第一个元素:
<availabe>
。