2012-09-12 10 views
23

jaki jest najlepszy sposób na przedwczesne opuszczenie groovy skryptu?jaki jest najlepszy sposób na przedwczesne opuszczenie groovy skryptu (z wyjątkiem system.exit (0))

Groovy skrypt odczytuje wiersz z danego pliku informacyjnego, a następnie wykonuje pewne prace weryfikacyjne, w przypadku, gdy weryfikacja nie powiedzie się (niespójne dane) skrypt musi opuścić przedwcześnie przepływ. Następnie system zadzwoni skrypt znowu czytać następny wiersz o tej samej informacji złożyć

przykład

Kod:

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

Aby ponownie uruchomić w którym zostało przerwane będzie problem ... nie można przenieść pętlę wewnątrz cokolwiek dzwoni Groovy i po prostu sprawdzić, każda linia w scenariusz? A może przekazać skryptowi BufferedReader, który może być użyty do odczytu linii, ale zachowa stan pomiędzy inwokacjami skryptu? –

+0

Dzięki za komentarz, w moim przypadku serwer wykonuje całą rutynową pracę – Toren

+1

To, że próbujesz złapać, nie ma w sobie innego, spróbuj złapać, możesz rzucić nowy wyjątek –

Odpowiedz

18

wystarczy użyć System.exit(0).

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

Można użyć kodu stanu wyjścia, określający co linia miałeś problemy z.

Wartość zero wskazuje, że wszystko było w porządku, a dodatnią wartością byłby numer wiersza. Możesz wtedy pozwolić twojemu fajnemu skryptowi wziąć linię początkową jako parametr wejściowy.


Jest to naiwna implementacja z głupim wyjątkiem, jeśli linia jest pusta.

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

Dziękuję za sugestię, ale nie mogę użyć system.exit (0) w w moim przypadku (przepraszam, że nie wspomniałem o tym na początku), szukam innego rozwiązania – Toren

+3

@Toren OK, ale byłoby wspaniale, gdybyś mógł zaktualizować swoje pytanie z większą ilością informacji. Wtedy jestem pewien, że dostaniesz odpowiedź, która pasuje do twoich potrzeb. – maba

+7

to powoduje zamknięcie jenkinsa – bicepjai

18

Jestem prawie pewien, że można po prostu "zwrócić" ze skryptu.

0

Wystarczy użyć zwrot:

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 
} 
Powiązane problemy