2012-07-11 23 views
15

kiến ​​bootstrap arg1 arg2 arg3truyền tham số dòng lệnh để nhắm mục tiêu mà sử dụng chúng trong exec

tôi cần phải echo "arg1 arg2 arg3" để tôi có thể gọi một chương trình với những lập luận

Tìm kiếm trên web sau đây nên làm việc nhưng không.

<target name="bootstrap"> 
    <echo>${arg0} ${arg1} ${arg2} </echo> 
    <!--exec executable="cmd"> 
     <arg value="${arg0}"/> 
     <arg value="${arg1}"/> 
     <arg value="${arg2}"/> 
    </exec--> 
</target> 

cũng có bất kỳ suy nghĩ nào về việc nếu người dùng chuyển sang 5 args hoặc 1 arg. Tôi cần phải thất bại nó không có số lượng thích hợp của args.

Trả lời

31

No.

Bạn không thể chuyển đối số sẽ được sử dụng bên trong tệp xây dựng theo cách đó. ant bootstrap arg1 arg2 arg3 sẽ được giải quyết khi bạn đang cố gọi các mục tiêu sau bootstrap, arg1, arg2, arg3 - và, rõ ràng, chỉ có mục tiêu bootstrap tồn tại.

Nếu bạn muốn chuyển đối số sẽ được sử dụng trong tệp xây dựng, bạn cần sử dụng định dạng -DpropertyName=value. Ví dụ:

ant bootstrap -Darg1=value1 -Darg2=value2 -Darg3=value3 

Cách khác, bạn có thể viết tập lệnh nhúng trong tệp xây dựng (như beanshell hoặc javascript, với lib hỗ trợ tập lệnh kiến) để xử lý đối số lúc đầu. Ví dụ, bạn có thể vượt qua các đối số theo cách này:

ant bootstrap -Dargs=value1,value2,value3,... 

và bây giờ bạn có một tài sản mang tên args với giá trị "value1, value2, value3, ..." (đối với ... Tôi có nghĩa là người dùng có thể nhập nhiều hơn 3 giá trị). Bạn có thể sử dụng beanshell chia args-arg1, arg2arg3 bởi ,, và cũng có thể làm một số kiểm tra ...

<script language="beanshell" classpathref="classpath-that-includes-the-beanshell-lib"> 
    String[] args = project.getProperty("args").split(","); 
    project.setUserProperty("arg1", args[0].trim()); 
    project.setUserProperty("arg2", args[1].trim()); 
    project.setUserProperty("arg3", args[2].trim()); 
</script> 
+0

cảm ơn vì giải thích rõ ràng. nhưng bây giờ tôi phải suy nghĩ lại về giải pháp của mình. –

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