2012-10-08 12 views
6

Mam tradycyjną konfigurację maven z projektem nadrzędnym i wieloma modułami, które są podprojektami. Kiedy wykonuję numer mvn deploy, uruchamiany jest pełny cykl życia (w tym test) do deploy dla każdego projektu w sekwencji (pierwszy odgłos). Chciałbym uniknąć wdrażania jakichkolwiek podprojektów, jeśli któryś z projektów nie zostanie zbudowany. Innymi słowy, chciałbym, aby deploy całego projektu nadrzędnego było "wszystko albo nic". Czy jest jakiś sposób, aby to osiągnąć?Wykonaj test nadrzędnego projektu przez wszystkie moduły przed wdrożeniem któregokolwiek z nich.

Odpowiedz

3

Jeśli zdalne repozytorium jest Sonatype Nexus Pro instancji, a następnie „pomostowy” obiekt Nexus Pro pozwoli na publikację atomowej do repozytorium właściwe.

Jeśli używasz Jenkins, jest opóźnione wdrożenie wtyczki, która będzie wdrażać wszystkie artefakty jako post-build (lub bardzo post-build) działanie (nie przeszkadza zbytnio którym repozytorium menedżer używasz)

Wreszcie jeden z moich średnich długoterminowych celów dla MRM-maven-plugin @ codehaus jest umożliwienie lokalnym inscenizację rozmieszczenia tak, że będziesz w stanie zrobić coś takiego

mvn mrm:catch-deploy deploy mrm:push-deploy 

BUT że ostatnia nie jest jeszcze napisana!

+0

Zmieniam zaakceptowaną odpowiedź na tę, ponieważ myślę, że masz rację, sugerując użycie serwera CI dla tego, a nie dla maven, to jest podejście, które zamierzam podjąć. – Ramon

+0

Stephen, do której wtyczki Jenkins odnosisz się do opóźnionego wdrożenia? –

+0

Nie odnosząc się do żadnej konkretnej wtyczki –

8

Sam Maven nie może tego zrobić (jeszcze). Obecnie proces kompilacji uruchamia wszystkie cele dla każdego modułu z osobna. Istnieją plany, aby umożliwić docelowe, aby zobaczyć duże zdjęcie, ale to chyba dla Maven 4.

W tym czasie, można użyć trochę skrypt:

mvn clean install && mvn deploy -DskipTests=true 

Pierwszy bieg buduje wszystko. Drugi bieg nie zrobi wiele (cały kod jest już skompilowany, a długie testy są pomijane), więc jest dość szybki.

Właściwie to preferuję to podejście, ponieważ mój skrypt zastępuje wszystkie istniejące elementy distributionManagement takimi, które dotyczą pamięci podręcznej mojej firmy. Oznacza to, że mogę wdrożyć dowolny projekt dla mojej firmy bez konieczności wprowadzania zmian w oryginalnym POM. Oto scenariusz:

#!/bin/bash 

if [[ ! -e pom.xml ]]; then 
    echo "Missing pom.xml" 1>&2 
    exit 1 
fi 

sed \ 
    -e '/<distributionManagement>/,/<\/distributionManagement>/d' \ 
    -e '/<\/project/d' \ 
    pom.xml > pom-deploy.xml || exit 1 

cat >> pom-deploy.xml <<EOF 


    <!-- ADDED BY $0 --> 
    <distributionManagement> 
     ... whatever you need ... 
    </distributionManagement> 
</project> 
EOF 

mvn -f pom-deploy.xml clean install && \ 
    mvn -f pom-deploy.xml deploy -DskipTests=true && \ 
    rm pom-deploy.xml 

exit 0 

gist

Powiązane problemy