2012-09-12 10 views
23

グルーヴィースクリプトを途中で残す最良の方法は何ですか?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

それはあなたのtry catchが別のtry catch内にないことを示します。新しい例外をスローすることができます –

答えて

18

ちょうどSystem.exit(0)を使用しています。

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

あなたが持つ問題を持っていたもののラインを示すために、終了ステータスコードを使用することができます。

ゼロの値はすべてがOKであり、正の値が行番号であることを示します。あなたはあなたのグルーヴィーなスクリプトが入力パラメータとしてスタートラインを取ることができます。


これは、行が空の場合は愚かな例外を除いた単純な実装です。

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私の場合、最初に言及しなかったのは申し訳ありませんが、別の解決策を探しています。 – 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 
} 
関連する問題