Maven در فاز Build
تا به اینجا و در آموزش های قبلی مشاهده کردید که Maven چگونه ساختار پروژه را متناسب با archetype انتخاب شده برای ما ایجاد میکند. در این آموزش قصد داریم به بررسی Build در پروژه های مبتنی بر Maven اشاره کنیم. وقتی که ساختار پروژه انجام شد و کد نویسی به پایان رسید به قسمت Build پروژه میرسیم که طبق مباحث بحث شده در آموزش اول , Maven بر Build پروژه نیز مدیریت میکند.
Maven Build را میتوان با Life Cycle آن مورد بررسی قرار داد. Maven Build Life Cycle که بر اساس Maven architecture می باشد به چندین فاز تقسیم میشود و اگر هریک از فاز هارا به صورت اختصاصی مشخص نکنیم , Maven بر اساس پیش فرض خود عمل میکند.
فاز های پیش فرض Life cycle را میتوان به این صورت بیان کرد :
- Validate : بررسی میکند که پروژه به درستی ایجاد شده و تمام نیازمندی های آن در دسترس میباشد
- Compile : سورس پروژه را Compile میکند
- Test : پروژه کامپایل شده را با Framework های Unit Test و متناسب با سورس پروژه تست میکند.
- Package : سورس کامپایل شده را به فرمت مورد نظر و مشخص شده در Artifact میسازد.
- Verify : تست های لازم بر روی خروجی کار را انجام میدهد و مشخص میکند که کیفیت با چیزی که مد نظر است, برابری میکند یا خیر
- Install : پروژه را درون Local Repository قرار میدهد
- Deploy : پروژه را درون Remote Repository قرار میدهد.
وقتی که یکی از فاز ها را به صورت اختصاصی میخواهیم اجرا کنیم, فاز های قبلی آن به صورت اتومات اجرا میشوند. برای مثال وقتی که میخواهید فاز Test پروژه را اجرا کنید فاز قبل تر از آن یعنی Validate و Compile نیز اجرا میشوند و یا اگر میخواهید پروژه را Package کنید, فاز های قبل آن یعنی Validate و Compile و Test نیز انجام میشوند.
برای اجرای این فاز ها باید به پوشه ای که فایل POM وجود دارد برویم.
دستور
mvn compile
را برای اجرای فاز Compile اجرا میکنیم و خروجی به صورت :
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building ZeroToHeroFirstMaven 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ZeroToHeroFirstMaven --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ZeroToHeroFirstMaven --- [INFO] Nothing to compile - all classes are up to date [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.614 s [INFO] Finished at: 2016-12-06T19:33:18+03:30 [INFO] Final Memory: 7M/119M [INFO] ------------------------------------------------------------------------
می باشد.
وقتی دستور Compile را اجرا میکنیم, ابتدا به بررسی صحت ساختار پروژه میپردازد و سپس به پوشه هایی کد که متناسب با ساختار پروژه برای Maven تعریف شده اند میرود و فایل های Java. را میابد و آنها را کامپایل میکند.
همانطور که در خروجی بالا میبیند این پیغام نمایش داده شده است :
[INFO] Nothing to compile - all classes are up to date
علت نمایش این پیغام این میباشد که چون ما در آموزش اول پروژه را کامپایل کردیم و دوباره قصد به کامپایل آن در این آموزش داشتیم و تغییری در فایل ها ایجاد نشد چنین خروجی را برای ما چاپ کرد. اما اگر یک فایل کلاس به پروژه اضافه کنیم چنین خروجی را نمایش میدهد :
[INFO] Compiling 2 source files to /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/target/classes
همچنین میتوان فاز Test را به این صورت اجرا کرد :
mvn test
و خروجی به این صورت خواهد بود :
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building ZeroToHeroFirstMaven 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ZeroToHeroFirstMaven --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ZeroToHeroFirstMaven --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ ZeroToHeroFirstMaven --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ ZeroToHeroFirstMaven --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ ZeroToHeroFirstMaven --- [INFO] Surefire report directory: /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running Zero.to.Hero.mvn.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.03 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.480 s [INFO] Finished at: 2016-12-06T19:41:41+03:30 [INFO] Final Memory: 15M/198M [INFO] ------------------------------------------------------------------------
و همانطور که در خروجی بالا مشاهده میکنید بعد از اجرای دستور Test به صورت اتومات فاز Compile را نیز اجرا کرد.
فاز مربوط به install را اجرا میکنیم :
mvn install
و خروجی آن نیز مانند دستورات قبل شامل تمام فاز های ماقبل خود میباشد و در نهایت چنین خروجی را به ما نمایش میدهد :
[INFO] Installing /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/pom.xml to /home/vhdrjb/.m2/repository/Zero/to/Hero/mvn/ZeroToHeroFirstMaven/1.0-SNAPSHOT/ZeroToHeroFirstMaven-1.0-SNAPSHOT.pom
در پروژه های بعدی اگر بخواهید از این پروژه استفاده کنید, وقتی مشخصات آنرا درون پروژه خود قرار دهید, Maven ابتدا درون Repository های Local شما بررسی میکند و در صورتی که وجود نداشت از Remote Repository ها استفاده میکند.
در مقاله بعدی archetype هارا مورد بررسی قرار میدهیم. آموزش Maven ادامه دارد
با ما همراه باشید
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.