Maven'in hedefleri ve aşamaları nedir ve aralarındaki fark nedir?


Yanıtlar:


251

Hedefler, sipariş hedeflerinin yerine getirilmesini belirleyen aşamalarda yürütülür. Bunun en iyi anlaşması, varsayılan olarak hangi hedeflerin hangi aşamalarda yürütüldüğünü gösteren varsayılan Maven yaşam döngüsü bağlantılarına bakmaktır . Derleme aşaması hedefleri her zaman paket aşaması hedeflerinden önce yürütülecek test aşaması hedeflerinden önce yürütülür.

Karışıklığın bir kısmı, maven yürüttüğünüzde bir hedef veya bir aşama belirleyebileceğiniz gerçeğiyle daha da kötüleşir. Bir faz belirtirseniz, maven sırayla belirttiğiniz faza kadar tüm fazları çalıştırır (örneğin, paketi belirtirseniz önce derleme aşaması ve ardından test aşaması ve son olarak paket aşaması boyunca çalışır) ve her aşama için o aşamaya bağlı tüm hedefleri yürütmek.

Maven derleme dosyanızda bir eklenti yürütmesi oluşturduğunuzda ve yalnızca hedefi belirlediğinizde, bu hedefi belirli bir varsayılan aşamaya bağlar. Örneğin, jaxb: xjc hedefi varsayılan olarak kaynak üretme aşamasına bağlanır. Ancak, yürütmeyi belirttiğinizde, bu hedef için aşamayı da açıkça belirleyebilirsiniz.

Maven'i yürütürken bir hedef belirtirseniz, o hedef ve yalnızca bu hedef çalıştırılır. Başka bir deyişle, jar: jar hedefini belirtirseniz, kodunuzu bir kavanoza paketlemek için yalnızca jar: jar hedefini çalıştırır. Derleme hedefini daha önce çalıştırmadıysanız veya derlenmiş kodunuzu başka bir şekilde hazırladıysanız, bu büyük olasılıkla başarısız olabilir.


11
Ben "çalışır" veya "yürütür" yerine Maven tüm aşamaları geçer (verilen ve dahil) " demeyi alışkanlık yaptım (Maven's Build Yaşam Döngüsüne Giriş olarak adlandırılır ). Böylesi bir hedef, gerçekten idam edilen hedefin kodundan daha net. Ama bu kişisel bir tat olabilir.
GeroldBroser, Monica

Ancak, herhangi bir aşamaya ait olmayan hedefler de yürütebiliriz, yani mvn archetype:generatebu durumda maven sadece hedefi gerçekleştirir mi?
Quazi Irfan

1
@Pace Son paragraf için referansınız var mı? : I ve burada basit bir proje ile çalıştı şüphe ettik mvn test: koşular --- maven-resources-plugin:2.6:resources ... --- maven-compiler-plugin:3.1:compile ... --- maven-resources-plugin:2.6:testResources ... --- maven-compiler-plugin:3.1:testCompile ... --- maven-surefire-plugin:2.12.4:testyaparken, mvn compiler:testCompilesadece çalışır --- maven-compiler-plugin:3.1:testCompile ....
GeroldBroser, Monica

4
@Pace başarısız olan mvn clean compiler:testCompileçalışır ( test sınıfında referans verilen test altındaki sınıf). Görünüşe göre bir hedef açıkça çağrılırsa aşamalar çağrılmaz. --- maven-clean-plugin:2.5:clean ... --- maven-compiler-plugin:3.1:testCompileFailed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-cli) on project mvnphase: Compilation failure ... cannot find symbol ... symbol: variable MvnPhaseMvnPhase
GeroldBroser

1
Geroldbroser ve @ kekko12 girdilerine dayanarak, son paragrafı, bir hedef belirtildiğinde, yalnızca önceki hedefin değil, yalnızca o hedefin çalıştırıldığını belirtmek için güncelledim.
Hız

188

Yaşam döngüsü, adlandırılmış fazların bir dizisidir .
Fazlar sırayla yürütülür. Bir fazın yürütülmesi, önceki tüm fazların yürütülmesi anlamına gelir.

Eklenti MOJO ( M aven O ld J ava O bject) olarak da adlandırılan bir hedefler topluluğudur . Analoji: Eklenti bir sınıftır ve hedefler sınıf içindeki yöntemlerdir.

Maven, Yapı Yaşam Döngülerinin merkezi konseptini temel alır . Her İçinde Yapı Yaşam döngüsü vardır Yapı Aşamaları ve her içeride Yapı Faz vardır Yapı Hedefleri .

Bir inşaat aşaması veya inşaat hedefi yürütebiliriz. Bir oluşturma aşaması yürütürken, bu oluşturma aşamasındaki tüm oluşturma hedeflerini yürütürüz. Derleme hedefleri bir veya daha fazla derleme aşamasına atanır. Ayrıca doğrudan bir oluşturma hedefi yürütebiliriz.

Yerleşik üç ana Yapı Yaşam Döngüsü vardır :

  1. varsayılan
  2. temiz
  3. yer

Her Yapı Yaşam Döngüsü Aşamalardan Oluşur

Örneğin, defaultyaşam döngüsü aşağıdaki Derleme Aşamalarından oluşur :

◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

Yukarıdaki aşamalardan geçmek için sadece bir komut çağırmamız gerekiyor:

mvn <phase> { Ex: mvn install }

Yukarıdaki komut için, ilk aşamadan başlayarak, tüm aşamalar 'yükleme' aşamasına kadar sırayla yürütülür. mvnaşağıdaki şekilde bir hedef veya bir aşama (veya birden çok hedef veya birden çok aşama) yürütebilir:

mvn clean install plugin:goal  

Eklentinizi başvurmak için kullanılan öneki özelleştirmek istiyorsanız Ancak, bir yapılandırma parametresi üzerinden doğrudan öneki belirtebilirsiniz maven-plugin-pluginsizin de eklentinin POM.

Yapı Aşaması Eklenti Hedeflerinden Oluşur

Maven'in işlevselliğinin çoğu eklentilerdedir. Bir eklenti , aşağıdaki sözdizimi kullanılarak yürütülebilen bir dizi hedef sağlar :

 mvn [plugin-name]:[goal-name]

Örneğin, bir Java projesi derleyici eklentisinin derleme hedefi ile çalışarak derlenebilir mvn compiler:compile.

Yapı yaşam döngüsü, hedef yürütmeye sipariş vermek için kullanılabilen adlandırılmış aşamaların bir listesidir.

Eklentiler tarafından sağlanan hedefler, yaşam döngüsünün farklı aşamalarıyla ilişkilendirilebilir. Örneğin, varsayılan olarak, hedef compiler:compile ile ilişkili compile faz sırasında, hedef surefire:test ile ilişkili test faz . Aşağıdaki komutu göz önünde bulundurun:

mvn test

Önceki komut yürütüldüğünde Maven, faza kadar ve testfaz dahil olmak üzere tüm fazlarla ilişkili tüm hedefleri çalıştırır . Böyle bir durumda Maven resources:resources, process-resourcesaşama ile ilişkilendirilen hedefi compiler:compileçalıştırır ve nihayetinde surefire:testhedefe ulaşıncaya kadar devam eder .

Bununla birlikte, bir yapı aşaması yapı yaşam döngüsünde belirli bir adımdan sorumlu olsa da, bu sorumlulukları yerine getirme şekli değişebilir. Ve bu, bu inşa aşamalarına bağlı eklenti hedeflerini açıklayarak yapılır.

Eklenti hedefi, bir projenin oluşturulmasına ve yönetilmesine katkıda bulunan belirli bir görevi (derleme aşamasından daha ince) temsil eder. Sıfır veya daha fazla inşa aşamasına bağlı olabilir. Herhangi bir yapım aşamasına bağlı olmayan bir hedef, doğrudan çağırma ile yapı yaşam döngüsünün dışında gerçekleştirilebilir. Yürütme sırası, amaç (lar) ın ve oluşturma aşama (lar) ının çağrılma sırasına bağlıdır. Örneğin, aşağıdaki komutu göz önünde bulundurun. cleanVe packagesüre argümanlar, yapı evreleri olan dependency:copy-dependencies(bir eklenti) bir hedeftir.

mvn clean dependency:copy-dependencies package

Eğer bu uygulanacaksa, cleanilk önce faz yürütülecektir (yani, temiz yaşam döngüsünün tüm önceki aşamalarını artı cleanfazın kendisini çalıştıracaktır) ve daha sonra dependency:copy-dependencieshedef, nihayet packagefazı (ve önceki tüm inşaat aşamalarını varsayılan yaşam döngüsü).

Dahası, bir hedef bir veya daha fazla inşa aşamasına bağlıysa, bu hedef tüm bu aşamalarda çağrılır.

Ayrıca, bir inşa aşaması da ona bağlı sıfır veya daha fazla hedefe sahip olabilir. Bir oluşturma aşamasının kendisine bağlı bir hedefi yoksa, bu oluşturma aşaması yürütülmez. Fakat eğer ona bağlı bir veya daha fazla hedefi varsa, tüm bu hedefleri yerine getirecektir.

Yerleşik Yaşam Döngüsü Bağlamaları
Bazı aşamaların varsayılan olarak kendilerine bağlı hedefleri vardır. Ve varsayılan yaşam döngüsü için, bu bağlamalar ambalaj değerine bağlıdır.

Maven Mimarisi:

resim açıklamasını buraya girin

Referans 1
Referans 2

Maven Yaşam Döngüsü Haritalaması için Eclipse örneği

Maven Yaşam Döngüsü Haritalaması için Eclipse örneği


2 profilim varsa, önce profil 1'in tüm eklentilerini ve sonra profil 2'nin tüm eklentilerini çalıştırabilir miyim?
Arı

[plugin-name]bu örnekte mvn [plugin-name]:[goal-name]bir eklenti önekidir . mvn clean installsadece " çok modüllü bir senaryoda kullanılabilir ". Çoklu modül tamamen farklı bir konudur.
GeroldBroser Monica tekrar eski haline

Aynı aşamaya eklenen hedefler herhangi bir düzene uyuyor mu?
eel ghEEz

5
Bu metnin çoğu Maven belgelerinden aynen kopyalanmıştır . Bu açıkça belirtilmelidir!
Lii

harika bir kaynak!
Bobo

45

Seçilen cevap harika, ama yine de konuya küçük bir şey eklemek istiyorum. Bir örnek.

Farklı aşamaların farklı eklentilere nasıl bağlandığını ve bu eklentilerin ortaya koyduğu hedefleri açıkça göstermektedir.

Öyleyse, şöyle bir şeyi çalıştırma vakasını inceleyelim mvn compile:

  • Derleyici eklentisini derleme hedefi ile yürüten bir aşama
  • Derleyici eklentisinin farklı hedefleri var. İçinmvn compile belirli bir hedefe, derleme hedefe eşlenmiş.
  • Koşmakla aynı mvn compiler:compile

Bu nedenle, aşama eklenti hedeflerinden oluşur .

resim açıklamasını buraya girin

Bağlantı referans


20
neden mvn testişaret ediyor packageve mvn installişaret ediyor deploy?
Abdull

2
Bir illüstrasyon hatası gibi görünüyor, fark ettiğiniz için teşekkürler (web'de kuruldu).
Johnny

3
İllüstrasyonu nereden aldınız? Telif hakkı ve kullanım şartlarını kontrol ettiniz mi?
Abdull

1
@Abdull resim buradan alınmıştır carminespagnuolo.eu/otheractivities/tutorato/PR-2014-2015/… (ve diğer birçok web sayfasında da görünmektedir) cevaba ekliyor. Bu noktayı yükselttiğiniz için teşekkür ederiz, bunun öneminin farkında değildi.
Johnny

1
Diyagramdaki fazlardan eklentilere olan işaretçiler de doğru değildir, jareklenti aslında packagefazda çalışır . Ve fazlar ve eklentiler arasındaki sandviçteki pom biraz kafa karıştırıcıdır (pom'da, varsayılan eklentilere ek olarak hangi eklentilerin hangi fazlarda çalışacağını yapılandırabileceğinizi varsayıyorum). Yine de genel prensip doğrudur.
Alexander Klimetschek

43

Tanımlar Maven sayfasının Yapı Yaşam Döngüsüne Giriş sayfasında ayrıntılı olarak verilmiştir , ancak özetlemeye çalıştım :

Maven, bir oluşturma işleminin 4 öğesini tanımlar:

  1. Yaşam döngüsü

    Üç yerleşik yaşam döngüleri (diğer adıyla inşa yaşam çevrimleri ): default, clean, site. ( Yaşam Döngüsü Referansı )

  2. Evre

    Her yaşam döngüsü oluşur aşamaları için örneğin defaultyaşam döngüsü: compile, test, package, install, vb

  3. Eklenti

    Bir veya daha fazla hedef sağlayan bir eser.

    Paketleme türüne ( jar, warvb.) Bağlı olarak eklentilerin hedefleri varsayılan olarak aşamalara bağlıdır. ( Yerleşik Yaşam Döngüsü Bağlamaları )

  4. Hedef

    Yürütülen görev (eylem). Bir eklentinin bir veya daha fazla hedefi olabilir.

    POM'da bir eklenti yapılandırırken bir veya daha fazla hedef belirtilmelidir . Ek olarak, bir eklentinin varsayılan bir faz tanımlanmamış olması durumunda, belirtilen hedef (ler) bir faza bağlanabilir.

Maven şunlarla çağrılabilir:

  1. bir aşama (ör clean. package)
  2. <plugin-prefix>:<goal>(ör. dependency:copy-dependencies)
  3. <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>(ör. org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile)

herhangi bir veya hepsinin bir veya daha fazla kombinasyonu ile, örneğin:

mvn clean dependency:copy-dependencies package

Yalnızca yaşam döngüsü aşamaları , (oluşturma sürecinin) "adımları" olarak kabul edilebilir . Ben 4 varlık / ürün / şeyler demeyi tercih ederim .
GeroldBroser, Monica

Dünyayı Build Phasegördüğümde, bunu bir yaşam döngüsünün başka bir aşaması olarak düşünüyorum ve bu beni karıştırıyor.
Quazi Irfan

26

Ben iyi bir cevap zaten sağlanır inanıyorum ama farklı 3 hayat döngüleri (bir kolay takip diyagramı eklemek istiyorum build, cleanve site) ve her aşamadan.

resim açıklamasını buraya girin

Kalın yazılmış fazlar - yaygın olarak kullanılan ana fazlardır.


2
generate-resourcesiki kez görünür ve generate-sourceseksik.
elingerojo

12

Sandeep Jindal ve Premraj'a teşekkür ederiz. Onların açıklamaları bir süre bununla karıştırdıktan sonra anlamama yardımcı oluyor.

Bazı tam kod örnekleri ve bazı basit açıklamalar burada https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ oluşturdum . Bence başkalarının anlamasına yardımcı olabilir.

Bağlantıdan kısaca, üçünü de aynı anda anlamaya çalışmamalısınız, önce bu gruplardaki ilişkiyi anlamanız gerekir:

  • Yaşam Döngüsü ve Faz
  • Eklenti - Gol

1. Yaşam Döngüsü ve Faz

Yaşam Döngüsü topluluğudur faz burada bakın sırayla Yaşam Döngüsü Referansları . Bir fazı çağırdığınızda, tüm fazı da çağırır önceki .

Örneğin, temiz yaşam döngüsünün 3 aşaması vardır ( temizlik öncesi, temizlik, temizlik sonrası ).

mvn clean

Ön temizleme ve temiz çağırır .

2. Eklenti - Gol

Hedef , Eklenti'deki bir eylem gibidir . Eklenti bir sınıfsa, hedef bir yöntemdir.

böyle bir hedefi çağırabilirsiniz:

mvn clean:clean

Bu, "temiz eklentide temiz hedefi çağırın" anlamına gelir (Burada hiçbir şey temiz aşama ile ilgili değildir. "Temiz" kelimesinin sizi şaşırtmasına izin vermeyin, aynı değildir!)

3. Şimdi Aşama ve Hedef arasındaki ilişki:

Faz hedef (ler) e bağlanabilir ( örneğin). Normalde temiz faz temiz hedefe bağlanır. Bu komutu çağırdığınızda:

mvn clean

Temizlik öncesi aşamayı ve temiz: temiz hedefe bağlanan temiz aşamayı çağırır.

Neredeyse aynı:

mvn pre-clean clean:clean

Daha ayrıntılı ve eksiksiz örnekler https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/


2

Aşamaları ve hedefleri olan maven çalışma terminolojisi.

Aşama: Maven aşaması, 2 veya 3 hedefle ilişkili bir dizi eylemdir

exmaple: - mvn clean çalıştırırsanız

Bu aşama mvn clean hedefini yürütecektir: temiz

Amaç: Maven hedefi aşama ile sınırlı

referans için http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-sttruc.html


4
Bu 'olmak zorunda değil '2 veya 3 gol ile ilişkili' ille. Olabilir hiçbiri , bir veya üçten fazla , hem de.
GeroldBroser, Monica

1

Aşağıdaki üç yerleşik yapı yaşam döngüsü vardır:

  • varsayılan
  • temiz
  • yer

Yaşam döngüsü varsayılanı -> [doğrulama, başlatma, kaynak oluşturma, işlem kaynakları, kaynak oluşturma, işlem kaynakları, derleme, işlem sınıfları, oluşturma-test kaynakları, işlem-test-kaynakları, oluşturma-test-kaynakları, işlem -test-kaynakları, test-derleme, süreç-test-sınıfları, test, hazır-paket, paket, entegrasyon-öncesi-test, entegrasyon-testi, entegrasyon-sonrası-test, doğrula, yükle, dağıt]

Yaşam döngüsü temizliği -> [temizlik öncesi, temizlik, temizlik sonrası]

Yaşam döngüsü sitesi -> [site öncesi, site, site sonrası, site dağıtımı]

Akış sıralıdır, örneğin, varsayılan yaşam döngüsü için, doğrulama ile başlar , sonra başlatır ve benzeri ...

Başka bir mvndeyişle, hata ayıklama modunu etkinleştirerek yaşam döngüsünü kontrol edebilirsiniz.mvn -X <your_goal>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.