2013-08-13 24 views
10

Trong ant, tôi có macrodef.kiến ​​có điều kiện nếu nằm trong macrodef

Giả sử tôi phải sử dụng macrodef này và có một mục bên trong macrodef đã nói rằng tôi muốn chạy iff thuộc tính special.property tồn tại và đúng, tôi phải làm gì?

Tôi hiện đang có

<macrodef name="someName"> 
    <sequential> 
     <someMacroDefThatSetsTheProerty /> 
     <some:thingHereThatDependsOn if="special.property" /> 
    <sequential> 
</macrodef> 

nào không hoạt động - một số: thingHereThatDependsOn doesnt có một "nếu" thuộc tính, và tôi không thể thêm một với nó.

antcontrib không khả dụng.

Với mục tiêu tôi có thể đặt mục tiêu là "if", tôi có thể làm gì với macrodef?

+1

thực Conditional trong ANT không hoạt động ở mức công việc, nó áp dụng cho các mục tiêu . Có lẽ cung cấp một số chi tiết hơn về những gì bạn đang cố gắng làm. –

+0

Tại sao bạn không thể sử dụng ant contrib? (Hoặc một ngôn ngữ kịch bản trong Ant như BeanShell.) Ant không có nghĩa là được sử dụng cho logic điều kiện trong các mục tiêu; chỉ cho các mục tiêu. Ant contrib được giới thiệu như một cách để giải quyết vấn đề này. Ant contrib là một lọ mã nguồn mở. Tại sao bạn không thể làm cho nó có sẵn? Nói rằng bạn không thể sử dụng ant contrib cảm thấy một chút như nói "Tôi cần phải giải quyết vấn đề này, nhưng tôi không được phép sử dụng bất kỳ không gian trong mã của tôi" –

+0

@ MarkO'Connor Tôi chỉ tự hỏi nếu nó có thể, để thành thật mà nói. – bharal

Trả lời

14

Trong 1.9.1 Ant và cao hơn, hiện nay là một thực hiện mới của ifunlessattributes. Đây có thể là những gì bạn đang nghĩ đến.

Trước tiên, bạn cần phải đặt chúng vào không gian tên của mình. Thêm chúng vào <project> tiêu đề của bạn:

<project name="myproject" basedir="." default="package" 
    xmlns:if="ant:if" 
    xmlns:unless="ant:unless"> 

Bây giờ, bạn có thể thêm chúng vào hầu hết các nhiệm vụ Ant hoặc tổ chức phụ:

<!-- Copy over files from special directory, but only if it exists --> 
<available property="special.dir.available" 
    file="${special.dir} type="dir"/> 

<copy todir="${target.dir}> 
    <fileset dir="${special.dir}" if:true="special.dir.available"/> 
    <fileset dir="${other.dir}"/> 
</copy> 

<!-- FTP files over to host, but only if it's on line--> 
<condition property="ftp.available"> 
    <isreachable host="${ftp.host}"/> 
</condition> 

<ftp server="${ftp.host}" 
    userid="${userid}" 
    passowrd="${password}" 
    if:true="ftp.available"> 
    <fileset dir=".../> 
</ftp> 
7

Điều này chỉ có thể nếu tác vụ ANT "thingHereThatDependsOn" hỗ trợ thuộc tính "if".

Như đã nêu ở trên, thực thi có điều kiện trong ANT, thông thường, chỉ áp dụng cho các mục tiêu.

<target name="doSomething" if="allowed.to.do.something"> 
    .. 
    .. 
</target> 

<target name="doSomethingElse" unless="allowed.to.do.something"> 
    .. 
    .. 
</target> 

<target name="go" depends="doSomething,doSomethingElse"/> 
+0

cảm ơn bạn đã xác nhận. – bharal

+5

Điều này không còn chính xác nữa. Ant 1.9.1 có các thuộc tính 'if' và' trừ' mới. –

+0

@DavidW. Tôi đã sửa chữa! Đã không biết về tính năng mới này. –

Các vấn đề liên quan