Khi bạn xác định một điểm mở rộng trong tệp xây dựng Ant, bạn có thể có nó theo điều kiện bằng cách sử dụng thuộc tính if hoặc except. Trên một mục tiêu, nếu/trừ khi ngăn chặn nhiệm vụ của nó được chạy. Nhưng một điểm mở rộng không có bất kỳ nhiệm vụ nào để chạy theo điều kiện, vì vậy điều kiện này làm gì? Suy nghĩ của tôi (được chứng minh là không chính xác trong Ant 1.8.0) là nó sẽ ngăn chặn bất kỳ nhiệm vụ nào mở rộng điểm mở rộng đang được chạy. Dưới đây là một ví dụ xây dựng kịch bản cho thấy các vấn đề:Việc sử dụng điểm mở rộng của Ant nếu/trừ các thuộc tính là gì?
<project name = "ext-test"
default = "main">
<property name = "do.it" value = "false" />
<extension-point name = "init"/>
<extension-point name = "doit" depends = "init" if = "${do.it}" />
<target name = "extend-init" extensionOf = "init">
<echo message = "Doing extend-init." />
</target>
<target name = "extend-doit" extensionOf = "doit">
<echo message = "Do It! (${do.it})" />
</target>
<target name = "main" depends = "doit">
<echo message = "Doing main." />
</target>
</project>
Sử dụng lệnh:
ant -v
Relults trong:
Apache Ant version 1.8.0 compiled on February 1 2010
Trying the default build file: build.xml
Buildfile: /Users/bob/build.xml
Detected Java version: 1.6 in: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Detected OS: Mac OS X
parsing buildfile /Users/bob/build.xml with URI = file:/Users/bob/build.xml
Project base dir set to: /Users/bob
parsing buildfile jar:file:/Users/bob/Documents/Development/3P-Tools/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml with URI = jar:file:/Users/bob/Documents/Development/3P-Tools/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml from a zip file
Build sequence for target(s) `main' is [extend-init, init, extend-doit, doit, main]
Complete build sequence is [extend-init, init, extend-doit, doit, main, ]
extend-init:
[echo] Doing extend-init.
init:
extend-doit:
[echo] Do It! (false)
doit:
Skipped because property 'false' not set.
main:
[echo] Doing main.
BUILD SUCCESSFUL
Total time: 0 seconds
Bạn sẽ thấy mục tiêu mở rộng-số tiền rất ít được thực hiện nhưng bản thân điểm mở rộng được bỏ qua. Kể từ khi một điểm mở rộng không có bất kỳ nhiệm vụ chính xác những gì đã bị bỏ qua? Bất kỳ mục tiêu nào phụ thuộc vào điểm mở rộng vẫn được thực thi vì mục tiêu bị bỏ qua là mục tiêu thành công. Giá trị của các thuộc tính if/except trên một điểm mở rộng là gì?