2009-05-06 36 views
63

Tôi không thể tìm cách đặt thuộc tính Ant với điều kiện chưa được đặt (nghĩa là nó không được xác định trong tệp thuộc tính và sẽ tự động mặc định) .Cách đặt thuộc tính Ant chỉ khi không được đặt

Cho đến nay, tôi chỉ có đoạn mã sau:

<condition property="core.bin" value="../bin"> 
    <isset property="core.bin"/> 
</condition> 

Nhưng điều này dường như chỉ để làm việc nếu giá trị được định nghĩa trong một thẻ <property>.

Có ai biết cách đặt điều kiện thuộc tính lần đầu tiên nếu điều kiện hiện tại không được đặt?

Trả lời

106

Bạn chỉ có thể đặt thuộc tính với tác vụ thuộc tính. Nếu thuộc tính đã được đặt, giá trị không thay đổi, vì thuộc tính không thay đổi.

Nhưng bạn cũng có thể bao gồm 'không' trong tình trạng của bạn:

<condition property="core.bin" value="../bin"> 
    <not> 
     <isset property="core.bin"/> 
    </not> 
</condition> 
58

Ant thực hiện điều này theo mặc định; nếu thuộc tính đã được đặt; đặt nó lại không có tác dụng:

<project name="demo" default="demo"> 
    <target name="demo" > 
     <property name="aProperty" value="foo" /> 
     <property name="aProperty" value="bar" /> <!-- already defined; no effect --> 
     <echo message="Property value is '${aProperty}'" /> <!-- Displays 'foo' --> 
    </target> 
</project> 

Cho

/c/scratch> ant -f build.xml 
Buildfile: build.xml 

demo: 
    [echo] Property value is '${aProperty}' 

BUILD SUCCESSFUL 
Total time: 0 seconds 
/c/scratch> ant -f build.xml 
Buildfile: build.xml 

demo: 
    [echo] Property value is 'foo' 

BUILD SUCCESSFUL 

Thuộc tính không thể được xác định lại; để làm điều này, bạn cần phải sử dụng một cái gì đó giống như variable task from ant-contrib.

+0

Đây không phải là sự thật. Tiếng vang đầu tiên trong ví dụ sau sẽ in "Ha1" và tiếng vọng thứ hai sẽ in "Ha2": \t \t \t \t \t \t \t \t Denis

+1

Tôi nghĩ bạn nhầm. Điều này rất rõ ràng trong tài liệu Ant. Tôi không thể chạy ví dụ của bạn (công việc If được định nghĩa ở đâu?Tuy nhiên, không giống như cú pháp của ant-contribs), chạy sẽ cung cấp giá trị đầu tiên, 1. It * is * có thể thực hiện việc này bằng cách viết các tác vụ tùy chỉnh, nhưng chỉ bằng cách sửa đổi trực tiếp mô hình dự án của Ant. –

+0

Cố gắng đặt mã của tôi vào một khối mục tiêu – Denis

2

Thuộc tính trong Ant là bất biến. Sau khi xác định chúng không thể thay đổi.

Nhưng gói Ant Contrib cung cấp tác vụ variable. Nó hoạt động giống như một thuộc tính nhưng các giá trị có thể được sửa đổi và bỏ đặt định. Exmaple từ variable task documentation:

<var name="x" value="6"/> 
    <if> 
     <equals arg1="${x}" arg2="6" /> 
     <then> 
      <var name="x" value="12"/> 
     </then> 
    </if> 
    <echo>${x}</echo> <!-- will print 12 --> 
6

Cách dễ nhất để làm những gì bạn muốn:

<if> 
    <not> 
     <isset property="your.property"/> 
    </not> 
    <then> 
     <property name="your.property" value="your.value"/> 
    </then> 
</if> 
2

Có sự hỗ trợ của việc sử dụng 'khác' within: https://ant.apache.org/manual/Tasks/condition.html để phục vụ mục đích chính xác của bạn.

khác

The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Apache Ant 1.6.3 

Vì vậy, thay đổi để:

<condition property="core.bin" else="../bin"> 
    <isset property="core.bin"/> 
</condition> 
Các vấn đề liên quan