2012-09-12 9 views
23

¿cuál es la mejor manera de dejar un guión maravilloso prematuramente?cuál es la mejor manera de dejar un guión maravilloso prematuramente (excepto system.exit (0))

Una secuencia de comandos groovy lee una fila de un archivo de información determinado y luego hace algún trabajo de verificación, en caso de verificación falla (datos incoherentes) secuencia de comandos debe abandonar el flujo prematuramente. Luego sistema llamará de nuevo el script para leer la siguiente fila de la misma información de archivo

Código ejemplo:

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

Para reiniciar donde lo dejó va a ser su problema ... ¿No puedes mover el bucle interior de lo que se llama el maravilloso, y acaba de comprobar cada línea en el ¿guión? O tal vez pasar el script un BufferedReader que se puede utilizar para leer las líneas, pero mantendrá el estado entre las invocaciones del script? –

+0

Gracias por hacer un comentario, en mi caso el servidor está haciendo todo el trabajo de rutina – Toren

+1

Si su captura de prueba no está dentro de otra trampa de prueba puede lanzar una nueva excepción –

Respuesta

18

sólo tiene que utilizar System.exit(0).

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

podría utilizar el código de estado de salida para indicar qué línea usted ha tenido problemas con el.

Un valor cero indica que todo estaba bien, y un valor positivo sería el número de línea. Podrías dejar que tu guión maravilloso tome la línea de inicio como parámetro de entrada.


Esta es una implementación ingenua con solo una excepción tonta si una línea está vacía.

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

Gracias por su sugerencia pero no puedo usar system.exit (0) en mi caso, (lo siento, no lo mencioné al principio), busco otra solución – Toren

+3

@Toren OK, pero sería genial si pudiera actualizar su pregunta con más información. Entonces estoy seguro de que obtendrá una respuesta que se adapte a sus necesidades. – maba

+7

esto causa el cierre de jenkins – bicepjai

18

Estoy bastante seguro de que puede simplemente 'devolver' desde un script.

0

Simplemente use retorno:

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 
} 
Cuestiones relacionadas