Maven: Yaşam Döngüsü, Aşama, Eklenti, Hedef
Bu iş parçacığında eksik olan başka bir ayrıntı düzeyini açıklığa kavuşturmak için geç yanıt vermek: bir Maven yapısının en küçük birimleri olan yürütmeler (bir hedefin).
Bu nedenle, belirli eklentiler tarafından sağlanan bir dizi yapılandırılmış hedefi çağırabilen aşamalardan (daha düşük ayrıntı düzeyi, bir döngü adımı) oluşan döngüleri (temelde belirli bir genel hedef için eylemler kümesi) oluşturduk . Yani, Maven (aynı zamanda) bir eklenti yürütücüsüdür, her eklenti bir veya daha fazla hedef sunabilir. Daha sonra (ayrıca) hangi hedefin hangi aşamaya ekleneceğine karar verirsiniz, çoğu zaman temerrüt yaşam döngüsünde (herhangi biri olmadan, yani varsayılan). Ancak aslında başka bir seviyeye sahip olabilirsiniz: yürütmeler (aynı hedef, aynı eklentiden veya farklı eklentilerden farklı hedefler)
Bütününü devam ettirmek için hazırladığım bir resim
Ve gerçekten de Maven onu (en küçük iş birimini) derleme günlüğündeki benzersiz dizge aracılığıyla gösteriyor:
plugin-artifactId:plugin-version:plugin-goal (goal-execution-id) @ project-name
Örneğin, bizde:
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ sample-project ---
Bu aslında şu anlama gelir (farklı ayrıntı düzeyleriyle):
- sırasında
compile
faz (belirtilmemiştir, ne yazık ki)>
- Maven Derleyici eklentisini çalıştırıyorum (
artifactId
ve version
)>
compile
Amacına başvuruyorum >
default-compile
yürütme tarafından tanımlandığı gibi
Bu benzersizdir çünkü aslında aynı hedefe (aynı eklentinin) farklı aşamalara veya aynı aşamaya, ancak farklı uygulamalarda (yani, farklı konfigürasyonlarla) bağlı olabilirsiniz. maven-compiler-plugin
Örneğin, aynı zamanda sırasında kullanılan test-compile
faz (onun ile derleme test kodu (a farklı faz) testCompile
farklı bir yürütme hedef) ( default-testCompile
). Ayrıca, POM'da (ve muhtemelen farklı bir konfigürasyonda) belirlediğiniz bir yürütme tarafından tanımlanan farklı bir aşamada otomatik olarak üretilen bazı kodları derleyebilirsiniz (aynı eklentiyi ve hedefi kullanarak).
Varsayılan yürütmeler, kutudan çıkar çıkmaz Maven paketleme bağlamaları aracılığıyla sağlanır , yani varsayılan olarak (ve yapılandırma yerine konvansiyonu zorunlu kılarak) Maven, belirli aşamalarda belirli hedefleri (standart eklentilerin) zaten başlatır. Bu varsayılan çağrıların yürütme kimlikleri belirli kurallara göre tanımlanır .
Bu ayrıca, bir Maven yapısının varsayılan bir davranışını (bağlanmasını) gerçekten geçersiz kılmak istiyorsanız, aynı eklenti için POM'unuzda tam olarak aynı yürütme kimliğini belirtmeniz (geçersiz kılmanız) gerektiğini de açıklar. Örneğin, maven-compiler-plugin
aynı default-compile
kimliğe sahip ancak mevcut olmayan bir aşamaya (veya boş bir aşamaya) bağlı olan bir yürütmeyi tanımlayan derlemeyi atlayabilirsiniz .
Kısaca söylemek gerekirse : bir yürütme, Maven'e hangi aşamada hangi konfigürasyonla hangi hedefleri yürüteceğini söyler.
Bazı yürütmeler varsayılan olarak sağlanır (varsayılan bağlamalar), bu da yalnızca 6 satırlık maven minimal pom'un neden çok şey yapabildiğini açıklar (derleme, test etme, paketleme vb.): Belirli aşamalarda standart eklentilerin hedeflerini yürütme: yapılandırma. Daha sonra, yapılandırma yoluyla, yapıya malzeme (yürütme) ekleyebilir veya önceden yapılandırılmış eklentilerin davranışını etkileyebilirsiniz (bu durumda bölüm yok , ancak yeterli olacaktır).pom.xml
executions
configuration
Evet, derleme döngülerini (ve bunların aşamalarını) atlayabilir ve doğrudan hedefleri (eklentilerin) çağırabilirsiniz. Aşağıdakileri hayal edin:
mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar
(NOT: yalnızca bir aramada satır içi olarak da çağırabilirsiniz)
Burada uygulama kodunu, test kodunu, yürütme testleri ve paketi derliyoruz: Bunun manuel, hataya açık, tekrarlayan ve zaman alıcı olacağını hayal edin. Konfigürasyon üzerine konvansiyon bize yardımcı olur: Maven, inşa yaşam döngüleri ve aşamaları sunar . Varsayılan yaşam döngüsü (isimsiz, yani varsayılan), en iyi uygulamalara ve kurallara (Maven mantrası) dayalı bir dizi aşama sağlar.
Yukarıdakinin aynısını elde etmek istiyorsanız, çalıştırın: mvn package
ve projenizi otomatik olarak derler, test eder ve paketler. Nasıl? eklentileri çağırmak. Yani aşamalar, anlamlı ve yapılandırılabilir eklenti (hedef) yürütme kümesidir. Daha da standart hale getirmek için, her aşama için Maven önce herhangi bir önceki aşamayı çağıracaktır, böylece örneğin test etmek istiyorsanız ilk olarak derlediğinizden emin olacaksınız.
ps aynı için birkaç hedef belirlerken execution
, iki farklı hedef için (bu nedenle, yine de benzersiz tuple) iki farklı yürütmeyi (aynı id ile) hala derleme günlüğünde açıkça göreceğinizi unutmayın.