2012-10-08 13 views
6

bunlardan herhangi dağıtmadan önce maven ana proje testi tüm modülleri olun. Ben mvn deploy yaptığınızda, sırayla her proje için deploy kadar tam yaşam döngüsünü (test dahil) çalışır (derinlik ilk). Herhangi bir projenin inşa edilememesi durumunda herhangi bir alt projeyi dağıtmaktan kaçınmak istiyorum. Diğer bir deyişle, tüm ana projenin deploy "hepsi ya da hiçbir şey" olmasını isterim. Bunu başarabilmenin bir yolu var mı?Ben ebeveyn projesi ile geleneksel maven kurulumu ve alt projeler nelerdir modülleri bir dizi var

cevap

3

uzak depo sonra Nexus Pro "Sahneleme" tesis depo uygun atomik yayıncılık için yeterli olacaktır, bir Sonatype Nexus Pro örneği ise.

Eğer Jenkins kullanıyorsanız, (kullandığınız depo hangi yönetici çok fazla akıl almaz) eylemi tüm post-yapı olarak eserler (ya da çok sonradan yapı) dağıtacak gecikmiş bir dağıtım eklentisi

var

Son olarak, MRM-maven-plugin @ codehaus benim orta uzun vadeli hedeflerinden biri size

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

ANCAK böyle bir şey yapmak mümkün olacak, böylece dağıtım lokal evrelemesini izin olduğunu Sonuncusu henüz yazılmadı! Bunu yerine maven için CI sunucusunu kullanarak önermek için haklısın düşünüyorum çünkü

+0

Ben bu bir kabul cevabı değiştiriyorum, ben alacağım yaklaşımdır. – Ramon

+0

Stephen, hangi Jenkins eklentisini gecikmiş dağıtım için yönlendiriyorsunuz? –

+0

Belirli bir eklentiye atıfta bulunmamak –

8

Maven kendisi (henüz) bunu yapamaz. Şu anda, oluşturma işlemi her bir modülün tüm hedeflerini ayrı ayrı çalıştırır.

mvn clean install && mvn deploy -DskipTests=true 

ilk çalıştırma şeyi oluşturur: Orada hedefler büyük resmi görmeye izin planları vardır ama o arada

Maven 4. iyisi bu, biraz kabuk komut dosyasını kullanabilirsiniz. İkinci çalışma fazla yapmayacaktır (tüm kod zaten derlenmiş ve uzun testler atlanmıştır), bu yüzden oldukça hızlıdır. benim senaryom da şirketimin önbelleği için olanlarla varolan herhangi distributionManagement unsurları değiştirdiğinden

Aslında bu yaklaşımı tercih ederler. Bu, şirketim için herhangi bir projeyi, orijinal POM'de herhangi bir değişiklik yapmaya gerek kalmadan dağıtabileceğim anlamına geliyor. İşte betik:

#!/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

İlgili konular