2012-09-12 2 views
23

cách tốt nhất để lại một kịch bản groovy sớm là gì?cách nào tốt nhất để để lại một kịch bản hấp dẫn sớm (ngoại trừ system.exit (0))

Tập lệnh groovy đọc một hàng từ tệp thông tin đã cho, sau đó thực hiện một số công việc xác minh, trong trường hợp tập lệnh xác minh không thành công (không phù hợp) cần phải thoát sớm. Sau đó, hệ thống sẽ gọi kịch bản một lần nữa để đọc hàng tiếp theo của các thông tin tương tự nộp

Mã dụ:

read a row 
try{ 
    //make some verification here 
}catch(Exception e){ 
    logger("exception on something occurred "+e,e) 
    //here need to leave a groovy script prematurely 
} 
+1

Để khởi động lại nơi bạn rời đi sẽ là vấn đề của bạn ... bạn không thể di chuyển vòng lặp bên trong bất cứ điều gì được gọi groovy, và chỉ cần xác minh mỗi dòng trong kịch bản? Hoặc có thể vượt qua các kịch bản một BufferedReader có thể được sử dụng để đọc các dòng, nhưng sẽ duy trì nhà nước giữa invocations của kịch bản? –

+0

Cảm ơn đã bình luận, trong trường hợp máy chủ của tôi đang làm tất cả các công việc thường xuyên – Toren

+1

Nó cố gắng bắt của bạn không phải là bên trong một thử bắt bạn có thể ném một ngoại lệ mới –

Trả lời

18

Chỉ cần sử dụng System.exit(0).

try { 
    // code 
} catch(Exception e) { 
    logger("exception on something occurred "+e,e) 
    System.exit(0) 
} 

Bạn có thể sử dụng mã trạng thái thoát để chỉ ra những gì dòng bạn đã có vấn đề với.

Giá trị bằng không sẽ cho biết mọi thứ đều OK và giá trị dương sẽ là số dòng. Sau đó, bạn có thể cho phép tập lệnh groovy của bạn lấy dòng bắt đầu làm tham số đầu vào.


Đây là một triển khai ngây thơ chỉ với một ngoại lệ ngớ ngẩn nếu một dòng trống.

file = new File(args[0]) 
startLine = args[1].toInteger() 

file.withReader { reader -> 
    reader.eachLine { line, count -> 
     try { 
      if (count >= startLine) { 
       if (line.length() == 0) throw new Exception("error") 
       println count + ': ' + line 
      } 
     } catch (Exception ignore) { 
      System.exit(count) 
     } 
    } 
} 
+1

Cảm ơn bạn đã gợi ý nhưng tôi không thể sử dụng system.exit (0) trong trường hợp của tôi, (xin lỗi tôi đã không đề cập đến nó trong đầu), tôi đang tìm một giải pháp khác – Toren

+3

@Toren OK, nhưng sẽ rất tuyệt nếu bạn có thể cập nhật câu hỏi của mình với nhiều thông tin hơn. Sau đó, tôi chắc chắn rằng bạn sẽ nhận được một câu trả lời phù hợp với nhu cầu của bạn. – maba

+7

điều này gây ra tắt máy jenkins – bicepjai

18

Tôi chắc chắn bạn chỉ có thể 'quay lại' từ tập lệnh.

0

Đơn giản chỉ cần sử dụng trở lại:

read a row 
try{ 
    //make some verification here 
}catch(Exception e){ 
    logger("exception on something occurred "+e,e) 
    //here need to leave a groovy script prematurely 
    return 
}