2009-06-01 31 views
50

Tôi muốn tập lệnh xây dựng của mình hoạt động tốt cho môi trường phát hành và phát triển.xác định thuộc tính kiến ​​từ môi trường với giá trị mặc định

Đối với điều này tôi muốn xác định một tài sản trong ant, gọi nó (ví dụ) fileTargetName

fileTargetName sẽ nhận được giá trị của nó từ các biến môi trường RELEASE_VER nếu nó có sẵn, nếu nó không phải là có sẵn nó sẽ nhận được mặc định giá trị của dev

Trợ giúp với ant <condition><value></condition> & <property> để làm cho nó hoạt động được đánh giá cao.

Trả lời

71

Một ví dụ từ Ant documentation như thế nào để có được một biến môi trường vào một tài sản:

<property environment="env"/> 
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/> 
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/> 

Trong trường hợp của bạn, bạn sẽ sử dụng ${env.RELEASE_VER}.

Sau đó cho phần điều kiện, tài liệu here nói rằng có ba thuộc tính có thể:

 
Attribute Description            Required 
property The name of the property to set.      Yes 
value  The value to set the property to. Defaults to "true". No 
else  The value to set the property to if the condition  No 
      evaluates to false. By default the property will 
      remain unset. Since Ant 1.6.3 

Đưa nó với nhau:

<property environment="env"/> 
<condition property="fileTargetName" value="${env.RELEASE_VER}" else="dev"> 
    <isset property="env.RELEASE_VER" /> 
</condition> 
+2

Hôm qua tôi sẽ không thể trả lời câu hỏi này, nhưng SO đã buộc tôi phải nghiên cứu. Hoan hô cho StackOverflow! –

+1

Cảm ơn bạn! Hành vi lạ của kiến: Nếu tham số môi trường không được đặt, thực hiện một tiếng vang trên $ {env.ANT_HOME} sẽ in "$ {env.ANT_HOME}". Lời gọi kiến ​​mặc định không được thiết lập (ít nhất là trên máy này: RH WS 5, bash) –

0

Tôi chắc rằng có nhiều cách dễ dàng hơn thế này, nhưng làm thế nào về:

<project name="example" default="show-props"> 

    <property environment="env" /> 

    <condition property="fileTargetName" value="${env.RELEASE_VER}"> 
     <isset property="env.RELEASE_VER" /> 
    </condition> 

    <condition property="fileTargetName" value="dev"> 
     <not> 
      <isset property="env.RELEASE_VER" /> 
     </not> 
    </condition> 

    <target name="show-props"> 
     <echo>property is ${fileTargetName}</echo> 
    </target> 

</project> 
+0

Không biết về thuộc tính khác với điều kiện - @mmyers FTW – toolkit

+0

Tôi đoán phải tìm mọi thứ trong sách hướng dẫn có lợi ích của nó . :) –

38

Bạn không cần sử dụng <condition> cho việc này. Properties trong Ant là immutable, vì vậy bạn chỉ có thể sử dụng này:

<property environment="env"/> 
<property name="env.RELEASE_VER" value="dev"/> 

Nếu biến RELEASE_VER môi trường được thiết lập, thì tài sản sẽ nhận được giá trị của nó từ môi trường và <property> tuyên bố thứ hai sẽ không có hiệu lực. Nếu không, thuộc tính sẽ không được đặt sau câu lệnh đầu tiên và câu lệnh thứ hai sẽ đặt giá trị của nó thành "dev".

+0

Không hoàn toàn có tác dụng tương tự, nhưng tôi đoán bạn có thể chỉ cần thêm một số khác để cung cấp cho nó bất kỳ tên nào bạn muốn, phải không? –

+0

Chắc chắn, bạn có thể thêm dòng thứ ba như . –

+0

Cảm ơn, đó là một bước ngoặt tốt đẹp về vấn đề này. Vì lý do dễ đọc, tôi sẽ gắn bó với điều kiện. –

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