Szokujące? I dobrze. Chodzi mi tu o dwa polecenia mavena, które mogą przysporzyć problemów.
Pierwsze:

Listing 1. nie za dobrze

$mvn clean compile test jar:jar dependency:copy-dependencies javadoc:javadoc site-deploy

Drugie:

Listing 2. też nie za dobrze

$mvn clean compile jar:jar dependency:copy-dependencies javadoc:javadoc site-deploy

Na czym polega różnica? W pierwszym przypadku jeżeli jakikolwiek test się zawali to proces zostanie przerwany. W drugim przypadku niepowodzenie będzie sygnalizowane, ale nie spowoduje przerwania pracy.
Jeżeli działamy z systemem CI to należy używać tylko drugiej wersji. W przeciwnym wypadku wszystkie buildy będą zwalone, a tak mamy przynajmniej szanse na unstable.
Jeżeli działamy na kopii lokalnej to pierwsze polecenie też nie jest najlepsze. Jeżeli padną nam testy to nie mamy dostępu do podpowiedzi jakie są w raportach (dyrektywa clean!). Ponad to testy wykonają się kilkukrotnie po raz pierwszy z test i następnie dla każdej wersji językowej oddzielnie. zatem może się okazać, że spędzamy kilkanaście minut oczekując, aż testy wykonają się trzy razy.
Rozwiązanie to użycie profili, które pozwalają na zdefiniowanie środowiska developerskiego, testowego i produkcyjnego.