Maven'in hedefleri ve aşamaları arasındaki fark / ilişki nedir? Birbirleriyle nasıl ilişkilidir?
Maven'in hedefleri ve aşamaları arasındaki fark / ilişki nedir? Birbirleriyle nasıl ilişkilidir?
Yanıtlar:
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.
mvn archetype:generate
bu durumda maven sadece hedefi gerçekleştirir mi?
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:test
yaparken, mvn compiler:testCompile
sadece çalışır --- maven-compiler-plugin:3.1:testCompile ...
.
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:testCompile
Failed 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 MvnPhase
MvnPhase
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 :
Her Yapı Yaşam Döngüsü Aşamalardan Oluşur
Örneğin, default
yaş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. mvn
aş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-plugin
sizin 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 test
faz dahil olmak üzere tüm fazlarla ilişkili tüm hedefleri çalıştırır . Böyle bir durumda Maven resources:resources
, process-resources
aşama ile ilişkilendirilen hedefi compiler:compile
çalıştırır ve nihayetinde surefire:test
hedefe 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. clean
Ve package
süre argümanlar, yapı evreleri olan dependency:copy-dependencies
(bir eklenti) bir hedeftir.
mvn clean dependency:copy-dependencies package
Eğer bu uygulanacaksa, clean
ilk önce faz yürütülecektir (yani, temiz yaşam döngüsünün tüm önceki aşamalarını artı clean
fazın kendisini çalıştıracaktır) ve daha sonra dependency:copy-dependencies
hedef, nihayet package
fazı (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:
Maven Yaşam Döngüsü Haritalaması için Eclipse örneği
[plugin-name]
bu örnekte mvn [plugin-name]:[goal-name]
bir eklenti önekidir . mvn clean install
sadece " çok modüllü bir senaryoda kullanılabilir ". Çoklu modül tamamen farklı bir konudur.
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
:
mvn compile
belirli bir hedefe, derleme hedefe eşlenmiş.mvn compiler:compile
Bu nedenle, aşama eklenti hedeflerinden oluşur .
Bağlantı referans
mvn test
işaret ediyor package
ve mvn install
işaret ediyor deploy
?
jar
eklenti aslında package
fazda ç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.
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:
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ı )
Evre
Her yaşam döngüsü oluşur aşamaları için örneğin default
yaşam döngüsü: compile
, test
, package
, install
, vb
Eklenti
Bir veya daha fazla hedef sağlayan bir eser.
Paketleme türüne ( jar
, war
vb.) Bağlı olarak eklentilerin hedefleri varsayılan olarak aşamalara bağlıdır. ( Yerleşik Yaşam Döngüsü Bağlamaları )
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:
clean
. package
)<plugin-prefix>:<goal>
(ör. dependency:copy-dependencies
)<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
Build Phase
gö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.
Ben iyi bir cevap zaten sağlanır inanıyorum ama farklı 3 hayat döngüleri (bir kolay takip diyagramı eklemek istiyorum build
, clean
ve site
) ve her aşamadan.
Kalın yazılmış fazlar - yaygın olarak kullanılan ana fazlardır.
generate-resources
iki kez görünür ve generate-sources
eksik.
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:
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/
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
Aşağıdaki üç yerleşik yapı yaşam döngüsü vardır:
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 mvn
deyişle, hata ayıklama modunu etkinleştirerek yaşam döngüsünü kontrol edebilirsiniz.mvn -X <your_goal>