2011-10-10 27 views
14

Tôi có một kịch bản kiến ​​để quản lý quá trình xây dựng. Đối với WiX, tôi cần tạo ra một hướng dẫn mới khi chúng tôi tạo ra một phiên bản mới của trình cài đặt. Bất cứ ai có bất kỳ ý tưởng làm thế nào để làm điều này trong ANT? Bất kỳ câu trả lời nào sử dụng các tác vụ tích hợp sẽ thích hợp hơn. Nhưng nếu tôi phải thêm một tập tin khác, đó là tốt.Có cách nào để tạo ra một guid trong ANT?

+1

Câu trả lời dưới đây sẽ làm việc, nhưng bạn đề cập đến bạn đang sử dụng Wix. Theo cuốn sách tôi đang đọc "WIX: Hướng dẫn của nhà phát triển cho Windows Installer XML", bạn có thể định nghĩa id là * và Wix sẽ tạo ra một hướng dẫn mới cho bạn. Vì vậy, bạn chỉ có thể thực hiện

Trả lời

24

Tôi muốn sử dụng một scriptdef task để xác định nhiệm vụ javascript đơn giản mà kết thúc tốt đẹp các lớp Java UUID, một cái gì đó như thế này:

<scriptdef name="generateguid" language="javascript"> 
    <attribute name="property" /> 
    <![CDATA[ 
    importClass(java.util.UUID); 

    project.setProperty(attributes.get("property"), UUID.randomUUID()); 
    ]]> 
</scriptdef> 

<generateguid property="guid1" /> 
<echo message="${guid1}" /> 

Kết quả:

[echo] 42dada5a-3c5d-4ace-9315-3df416b31084 

Nếu bạn có một cách hợp lý up-to -date Ant cài đặt, điều này sẽ làm việc ra khỏi hộp.

+1

Điều này hoàn toàn hoàn hảo. –

+0

Bạn không biết mình có thể làm được điều này; điều đó thật tuyệt. Cảm ơn. – duma

+2

Lưu ý rằng nếu bạn đang sử dụng kiến ​​với Java 8 JDK, bạn có thể gặp vấn đề sau với câu lệnh importClass. Một công việc đơn giản xung quanh là bỏ qua nó và sử dụng tên đầy đủ của UUID trên dòng tiếp theo. http://stackoverflow.com/questions/22503100/java-8-javascript-engine-backwards-compatibility – Kyle

2

Nếu bạn đang sử dụng (hoặc muốn sử dụng) groovy, điều này sẽ hoạt động tốt.

<project default="main" basedir="."> 
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" 
     classpath="lib/groovy-all-2.1.5.jar" /> 
    <target name="main"> 
     <groovy> 
      //generate uuid and place it in ants properties map 
      def myguid1 = UUID.randomUUID() 
      properties['guid1'] = myguid1 
      println "uuid " + properties['guid1'] 
     </groovy> 
     <!--use the uuid from ant --> 
     <echo message="uuid ${guid1}" /> 
    </target> 
</project> 

Output

Buildfile: C:\dev\anttest\build.xml 
main: 
     [groovy] uuid d9b4a35e-4a75-454c-9f15-16b4b83bc6d0 
     [echo] uuid d9b4a35e-4a75-454c-9f15-16b4b83bc6d0 
BUILD SUCCESSFUL 

Sử dụng 2.1.5 groovy và kiến ​​1.8

+0

Nếu bạn sao chép groovy-all-x.x.x.jar vào thư mục lib lib, bạn có thể xóa đường dẫn lớp trên taskdef groovy. Thử nghiệm với groovy-all-2.4.6.jar và ant 1.9.4 –

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