2012-09-12 59 views
23

什麼是過早離開groovy腳本的最佳方式?什麼是過早離開groovy腳本的最好方法(system.exit(0)除外)

groovy腳本從給定的信息文件中讀取一行,然後進行一些驗證工作,以防驗證失敗(不一致的數據)腳本需要過早離開流程。然後,系統會再次調用腳本讀取相同信息的下一行文件

代碼示例:

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

要重新啓動你離開的地方將是你的問題......你能不能移動裏面無論是調用常規的循環,只是驗證在每一行腳本?或者可以傳遞一個可用於讀取行的BufferedReader腳本,但會在腳本的調用之間保持狀態? –

+0

感謝您的評論,在我的情況下,服務器正在做所有日常工作 – Toren

+1

它是你的嘗試趕不是在另一個嘗試趕上,你可以拋出一個新的例外 –

回答

18

只需使用System.exit(0)

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

你可以使用退出狀態代碼,表明你有什麼符合的問題。

零值表示一切正常,並且正值將是行號。然後你可以讓你的groovy腳本將起始行作爲輸入參數。


這是一個天真的實現,如果一行是空的,只是一個愚蠢的異常。

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

謝謝你的建議,但我不能使用system.exit(0)中我的情況,(對不起,我沒有在一開始就提到它),我正在尋找另一種解決方案 – Toren

+3

@Toren OK,但如果您可以用更多信息更新您的問題,那將是非常好的。那麼我相信你會得到一個適合你需求的答案。 – maba

+7

這導致詹金斯關機 – bicepjai

18

我很確定你可以從腳本'返回'。

0

只需使用回報:

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 
} 
相關問題