Domanda

Il metodo execute di AbstractMavenMojo dichiara che genera due eccezioni, MojoExecutionException e MojoFailureException. Il lancio di entrambi provoca l'arresto della compilazione e il registro visualizza un quasi messaggio identico in ciascun caso.

Il messaggio per MojoExecutionException è:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

e il messaggio per MojoFailureException è:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

Quando dovresti lanciare quale eccezione e perché?

È stato utile?

Soluzione

Sembra che dovresti lanciare un MojoExecutionException se il problema rende impossibile continuare con la compilazione e usare MojoFailureException in caso contrario.

Puoi controllare il comportamento per la consegna di MojoFailureExpections quando viene eseguito Maven.

Il seguente collegamento descrive in dettaglio la differenza: https://books.sonatype.com/mvnref-book/reference/writing-plugins-sect-custom-plugin.html#writing-plugins-sect-failure
Collegamento non funzionante? ricerca Google sonatype writing-plugins-sect-custom-plugin writing-plugins-sect-failure

Altri suggerimenti

Lancia un MavenFailureException se il tuo passo di compilazione fallisce ma potrebbe essere ignorato (ad esempio potresti voler ignorare i test falliti).

Lancia un MavenExecutionException se non c'è modo di continuare - supponi di aver rilevato una condizione irrecuperabile come quella che stavi cercando di compilare e che il progetto non potesse essere compilato, quindi tutto ciò dopo sarebbe comunque inutile.

MavenExecutionException ucciderà sempre la build mentre il comportamento di MavenFailureException è configurabile.

Il comportamento predefinito è quello di fallire velocemente, ovvero lo stesso comportamento dell'errore di compilazione, che è spesso quello che vuoi. Puoi modificare il comportamento passando un flag della riga di comando:

mvn -fae ha esito negativo alla fine, vale a dire che ogni fase di compilazione verrà eseguita e potresti riscontrare fallimenti successivi in ??caso di errore di una fase, l'intera generazione viene interrotta solo una volta eseguita ogni fase.

mvn -fn non fallisce. Ciò è utile se si desidera ignorare, ad esempio, un test di integrazione non riuscito, ma mvn deploy .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top