شروع Maven
در این آموزش میخواهیم یک توضیح مختصر راجب Maven بدهیم و در چند قسمت Maven را به صورت کامل آموزش دهیم . پس با ما تا قهرمانی Maven همراه باشید.
در ابتدا Maven چیست ؟
معمول ترین استفاده های Maven این است که از آن به عنوان یک Build Tool میتواند استفاده کرد. استفاده دیگر آن این است که میتوان به عنوان Project Management Tools برای generate و Dependency Management استفاده شود.
در این قسمت میخواهیم از Maven به عنوان Build Tools استفاده کنیم.
بدین منظور چالش هایی که در پروژه ها برای ما پیش می آید را بررسی میکنیم :
- در بعضی پروژه ها از چندین jar file استفاده میشود. برای مثال وقتی که میخواهید از Hibernate Framework استفاده کنید نیاز است تا چندین فایل jar را به Web Application خود اضافه کنید. حال باید مطمعن باشید که این jar فایل ها در تمام زمان ها , مانند زمان Compile در دسترس برنامه قرار داشته باشد.
- Dependency ها را میتوان به عنوان دومین چالش در نظر گرفت . وقتی که شما چندین jar فایل دارید , هر jar فایل ممکن است خود به چندین jar فایل دیگر نیاز داشته باشد
- Project structure یکی از مهم ترین قسمت های یک برنامه میباشد . برای مثال پوشه WEB-INF و ساختن باقی پوشه های مورد نیاز برای معماری که برای پروژه خود استفاده میکنید.
- Build , Publishing and deploying که به منظور اجرا و انتشار پروژه میباشد .
میخواهیم با استفاده از Maven این چالش هارا مرتفع کنیم و سرعت انجام پروژه هایمان را سریع تر و دقیق تر کنیم.
شما میتوانید Maven را از آدرس زیر دانلود کرده و بر روی سیستم خود نصب کنید :
پس از نصب دستور
mvn --version
ار اجرا کنید تا از درست نصب شدن آن بر روی سیستمان اطمینان حاصل کنید :
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T20:11:47+03:30) Maven home: /home/vhdrjb/Documents/Developing/apache-maven-3.3.9 Java version: 1.8.0_111, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-8-oracle/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "4.4.0-47-generic", arch: "amd64", family: "unix"
یک پوشه میسازیم با نام ZeroToHeroMaven و اولین پروژه خود را درون آن میسازیم و دستور :
mvn archetype:generate
را اجرا میکنیم. در نتیجه اجرای این دستور تمام معماری های مبتنی بر Maven برای شما نمایش داده میشود به این صورت :
۸۹۶: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
آیدی ۸۹۶ یک پروژه ساده با تمام Dependency های اولیه مورد نیاز برای آن و پوشه های لازم این معماری برای شما میسازد.
در مرحله بعد از شما ورژن مورد نظر را میخواهد
در مرحله بعد از شما چند آیتم را میخواهد :
- group id : این مقدار همان package name شما میباشد.
- ArtifacID : این مقدار به عنوان نام برنامه ای میباشد که میخواهید بسازید.
- version : ورژنی که برای برنامه میخواهید قرار بدهید.
- package : این مقدار را با مقدار group id برابر میگیریم.
این مقادیر را به این صورت وارد میکنیم :
و در نهایت صحیح بودن اطلاعات را تایید میکنیم و در خروجی چنین پیغامی برای ما به نمایش داده میشود :
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: basedir, Value: /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven [INFO] Parameter: package, Value: Zero.to.Hero.mvn [INFO] Parameter: groupId, Value: Zero.to.Hero.mvn [INFO] Parameter: artifactId, Value: ZeroToHeroFirstMaven [INFO] Parameter: packageName, Value: Zero.to.Hero.mvn [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 16:28 min [INFO] Finished at: 2016-11-22T20:13:38+03:30 [INFO] Final Memory: 14M/225M
وقتی به پوشه برنامه برویم یک فایل pom.xml و یک پوشه src وجود دارد. محتوای این pom به این صورت میباشد :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Zero.to.Hero.mvn</groupId> <artifactId>ZeroToHeroFirstMaven</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>ZeroToHeroFirstMaven</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
در ابتدا مشخصاتی که راجب پروژه مشخص کرده ایم وجود دارد :
<groupId>Zero.to.Hero.mvn</groupId> <artifactId>ZeroToHeroFirstMaven</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
در خط آخر packaging مشخص میکند که خروجی ما به صورت jar مباشد.
در قسمت های بعد توضیحاتی پیرامون پروژه وجود دارد. در انتها یکی از مهم ترین کار هایی که Maven برای ما انجام میدهد وجود دارد و آن هم کنترل و اضافه کردن Dependency ها میباشد :
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
در این پروژه ما به Junit نیاز داریم و همانطور که میبینید مشخصات junit درون آن قرارداده شده است.
حال به درون پروژه و به مسیر src/main/java/Zero/to/Hero/mvn/ میرویم. یک فایل جاوا با نام App.java وجود دارد که حاوی کد زیر میباشد :
package Zero.to.Hero.mvn; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello Zero To Hero!" ); } }
در نهایت پروژه اول ما ساخته شده است.
برای Compile پروژه به پوشه ای که فایل pom وجود دارد میرویم و دستور :
mvn compile
را اجرا میکنیم.
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ZeroToHeroFirstMaven --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/target/classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.010 s [INFO] Finished at: 2016-11-22T20:24:26+03:30 [INFO] Final Memory: 14M/212M
خروجی به این صورت میباشد و به معنای Compile موفق پروژه ما میباشد.
از دستور
mvn package
استفاده میکنیم تا پروژه ما را بسته و نسخه قابل اجرای آنرا تحویل دهد و خروجی آن به این صورت میباشد :
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ ZeroToHeroFirstMaven --- [INFO] Building jar: /home/vhdrjb/Documents/Project/Maven/ZeroToHeroMaven/ZeroToHeroFirstMaven/target/ZeroToHeroFirstMaven-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.333 s [INFO] Finished at: 2016-11-22T20:26:05+03:30 [INFO] Final Memory: 15M/158M [INFO] ------------------------------------------------------------------------
در نهایت از طریق دستور زیر پروژه را اجرا میکنیم :
java -cp target/ZeroToHeroFirstMaven-1.0-SNAPSHOT.jar Zero.to.Hero.mvn.App
و خروجی آن :
Hello Zero To Hero
میباشد.
خب ما در ابتدا چهار چالش را مطرح کردیم و حالا بررسی میکنیم که آیا این چهار چالش اساسی بوسیله Maven مرتفع شده اند ؟
- چالش اول : دیگر به jar فایل ها نیازی نداریم و آنها را با pom به پروژه اضافه میکنیم.
- چالش دوم : در این جا ما از Junit استفاده کردیم . خود Junit ممکن است به چندین jar فایل نیاز داشته باشد اما ما درگیر آن نشدیم.
- چالش سوم : تمام پوشه های پروژه و همینطور pom فایل برای ما به صورت اتوماتیک ساخته شد
- چالش چهارم : Compile و ساختن نسخه قابل اجرا و قابل انتشار نیز ایجاد شد.
در مقاله بعدی Maven را در فاز Build مورد بررسی قرار میدهیم. با ما تا پایان آموزش های Maven همراه باشید…….
ادامه دارد ….
مطالب زیر را حتما مطالعه کنید
از Java به Dart – کلاس و Constructor
آموزش Gradle – اهمیت Project Automation
تفاوت Sequence و List در کاتلین
بهترین محیط های توسعه(IDE) برای جاوا
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
8 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
Define value for property ‘docker.env.MAIN’:
Define value for property ‘env.DOCKER_REGISTRY’:
سلام برای دو خواسته بالا چه مقداری قرار میگیرد؟
من به تازگی maven 3.5.4 را نصب کردم و علاوه بر 4 آیتم موجود در مقاله این دو آیتم را هم درخواست میکند.
با تشکر
سلام . اگر ممکن هست pom فایلتون قرار بدین و یا اینکه چک کنین ببینین همچین property هایی توی pom فایل تعریف شده یا نه. اگر هست باید توی تگ properties تعریفشون کنین و بهش مقدار بدین. خطایی که دارین مربوط به مقادیر Environment variables برای Docker هست. که احتمالا اون هارو توی maven مقدار دهی نکردین
سلام. اگه براتون مقدوره لطفا آموزشتون رو برای maven 3.5.0 بروز کنید. ظاهرا مقدار زیادی تفاوت داره. من یک جاهایی رو نتونستم طبق دستور شما عمل کنم .ممنون
ممنون از همراهیتون دوست عزیز. طبق release note برای maven 3.5.0 تغییر چندانی در ساختار دستورات بوجود نیومده. اگر جایی دستور خاصی اجرا نمیشه بفرمایین تا بررسی بشه.
با تشکر
خوب بود ممنون از اشتراک گذاری
سلام. ممنون از همراهتیون
بسیار عالی
ممنونم
ممنون از همراهیتون دوست عزیز