2012-02-15 35 views
7

Các ANT xây dựng kịch bản tôi có nào sau đây:mkdir trong kiến ​​không thành công. Làm thế nào tôi có thể xử lý lỗi này

  1. Thực hiện xây dựng dựa trên Windows server & Zip các tập tin nhị phân
  2. xạ một ổ đĩa mạng với các thông tin khác nhau cho một ổ đĩa cục bộ (ví dụ: P :) sử dụng net use
  3. tôi đang sử dụng <mkdir> để tạo ra một thư mục trên ổ đĩa gắn (P :)
  4. Sao chép mã nhị phân với ổ

Dưới đây là mã của tôi cho mkdir

<echo>Creating ${buildRequesterUserId} folder at mirroring site starts</echo> 
<mkdir dir="P:\build_output\${buildRequesterUserId}"/> 
<echo>Creating ${buildRequesterUserId} folder at mirroring site ends</echo> 

Một thời gian tạo ra các tác phẩm thư mục và một thời gian nó không thành công với lỗi dưới đây

creation was not successful for an unknown reason và làm cho việc xây dựng không

Lỗi này xảy ra một cách ngẫu nhiên. Mkdir hoạt động một thời gian. Tôi không chắc chắn lý do tại sao nó không thành công và không chắc chắn vì nó tụt hậu mạng

cũng là thư mục tôi đang cố gắng tạo hoặc có thể chưa tồn tại. Tôi đọc rằng mkdir không làm bất cứ điều gì nếu thư mục tồn tại là

Tôi đã kiểm tra và không có failonerror cho mkdir. Tôi không muốn việc xây dựng thất bại vì điều này.

tôi đã xử lý các lỗi trong copy phần nhưng không chắc chắn làm thế nào để xử lý việc này mkdir

Làm thế nào tôi có thể đạt được điều này? Bất kỳ trợ giúp sẽ được đánh giá

Trân

Karthik

+0

nếu bạn không phiền, bạn có thể bình luận về câu trả lời của tôi và mô tả một phần của nó giải quyết vấn đề cho bạn (nếu nó thực sự giải quyết) –

+0

bạn có quyền ghi không? – jgr208

Trả lời

2

Apache Ant Mkdir nhiệm vụ được gọi File.mkdirs() phương pháp đó là vulnerable to race conditions.

File.mkdirs() không phải là hoạt động nguyên tử - tôi đoán nó được triển khai dưới dạng chuỗi các cuộc gọi mkdir.

Trong trường hợp hệ thống tập tin từ xa, có khả năng máy chủ của bạn nhận thức được các thay đổi hệ thống tập tin ở giữa hoạt động File.mkdirs() và không thành công.

Ant dường như để cố gắng sửa chữa nó như Mkdir đang thay đổi từ này trong 1.8.0

boolean result = mkdirs(dir); 
if (!result) { 
    String msg = "Directory " + dir.getAbsolutePath() 
     + " creation was not successful for an unknown reason"; 
    throw new BuildException(msg, getLocation()); 
} 

này trong 1.8.2

boolean result = mkdirs(dir); 
if (!result) { 
    if (dir.exists()) { 
    log("A different process or task has already created " 
     + "dir " + dir.getAbsolutePath(), 
     Project.MSG_VERBOSE); 
    return; 
    } 
    String msg = "Directory " + dir.getAbsolutePath() 
     + " creation was not successful for an unknown reason"; 
    throw new BuildException(msg, getLocation()); 
} 

như vậy có lẽ nâng cấp lên Ant mới nhất có thể giúp đỡ?

Nếu không - một số lực lượng vũ phu Mkdir có thể tạo tiện ích nhiệm vụ bằng cách triển khai phương pháp execute() của riêng bạn.

Nếu không - Trycatch task từ Ant Contrib sẽ hoạt động.

+0

Nâng cấp ANT. Tôi đã thử nghiệm với 1.7x điều này vẫn không thành công. Tôi đã không thử TryCatch vì tôi không có AntContrib. nhưng tôi nghĩ rằng điều này cũng sẽ giúp tôi trong việc nắm bắt lỗi – KK99

+0

ông cho biết sự thay đổi là giữa 1.8.0 và 1.8.2, vì vậy nâng cấp lên 1.7.x sẽ không giúp ... – orirab

-4

Đây là cách tôi giải quyết nó:

  1. Mở tệp build.properties của bạn (Trên thực tế mở tất cả các thuộc tính file tham chiếu từ build.xml)
  2. Kiểm tra đối với bất kỳ dấu không gian và các tab trên bất kỳ dòng tập tin.
  3. Thêm dòng trống bổ sung vào cuối tệp.
+0

Tôi có thể biết lý do đằng sau điều này không? –

0

Bạn có thể sử dụng Tác vụ sao chép để tạo thư mục (bao gồm thư mục con).

1

Đối với tôi, tôi gặp vấn đề tương tự với phiên bản 1.9 của kiến.

Tôi đã xóa một thư mục và ngay lập tức tái tạo nó:

Mặc dù thư mục đã được địa phương (không phải là một ổ đĩa mạng), thêm một giấc ngủ của 1 giây giữa hai hoạt động khắc phục sự cố cho tôi :

<delete dir="${jar.dir}"/> 
<sleep seconds="2"/> 
<mkdir dir="${jar.dir}"/> 
+0

Hoặc sử dụng [Thử lại tác vụ] (http://stackoverflow.com/a/23998066/2818782) – user2818782

0

Đối với tôi khắc phục sự cố trong linux là đơn giản như chạy như người sử dụng sudo

"sudo con kiến"

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