محمد صادق شیخ زاهدی
محمد صادق شیخ زاهدی
خواندن ۵ دقیقه·۶ ماه پیش

نگاهی به Maven، چیست و چه بخش هایی دارد

سلام :) Maven یک ابزار مدیریت پروژه قدرتمند است که بر اساس POM (project object model) ساخته شده است. برای ساخت پروژه(build)، مدیریت dependencyها و مستندسازی(documentation) استفاده می شود. به طور خلاصه می توان گفت maven ابزاری است که می تواند برای ساخت و مدیریت هر پروژه مبتنی بر جاوا استفاده شود.

در این مقاله به برسی اجمالی هر بخش می پردازیم هرچند بحث گسترده تر است اما دراینجا بحث های کلی را مطرح میکنم.

امکانات Maven:

فایل‌ POM:

فایل‌های Project Object Model (POM) فایل‌های XML هستند که حاوی اطلاعات مربوط به پروژه و اطلاعات پیکربندی مانند وابستگی‌ها(dependencies)(به زبان ساده تر کتابخانه ها)، source directory، پلاگین ها، پروفایل ها و غیره است که توسط Maven برای build پروژه استفاده می‌شود. Maven فایل pom.xml را برای انجام تنظیمات و عملیات آن نیاز دارد.

دپندنسی ها(Dependencies):

کتابخانه های خارجی جاوا هستند که برای پروژه مورد نیاز هستند. به عنوان مثال شما میخواهید در Spring با دیتابیس ارتباط برقرار کنید برای اینکار نیاز دارید تا از Spring Data Jpa در پروژه خود استفاده نمایید برای اینکار نیاز هست تا dependency مربوط به آن را که spring-boot-starter-data-jpa است در فایل pom پروژه اضافه نمایید تا بتوانید از کلاس ها، اینترفیس ها و انوتیشن های موجود در آن استفاده کنید.

برای مثال:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

با اضافه کردن این دپندنسی شما به انوتیشن های jpa که شامل Entity, Id, GeneratedValue, Table, Query و ... ،همچنین اینترفیس های JpaRepository, JpaSpecificationExecutor و ... و قابلیت های ORM هایبرنیت دسترسی پیدا میکنید

مخازن(Repositories):

دایرکتوری هایی که شامل مجموع فایل های JAR که همان کتابخانه ها یا بهتر بگیم dependencyها هستند، مخازن محل نگهداری dependency ها هستن.

مخزن محلی یک دایرکتوری در هارد دیسک دستگاه شما است که معمولا در مسیر C:\Users\your_username\.m2\repository قرار دارد و دپندنسی ها در آنجا کش و نگهداری می شوند. اگر dependency مورد نظر در مخزن محلی Maven یافت نشد، Maven آنها را از یک مخزن مرکزی Maven دانلود کرده و در مخزن محلی شما قرار می دهد یکی ازین مخازن https://mvnrepository.com می باشد.

چرخه های حیات (Build Life Cycles):

که بر اساس 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 وجود دارد برویم و دستور آن را در کنسول اجرا نمایید مثلا برای اجرای فاز Compile دستور زیر را اجرا میکنیم

mvn compile

پروفایل ها (Build Profiles):

پروفایل مجموعه ای از مقادیر پیکربندی است که به شما این امکان را می دهد پروژه خود را با استفاده از تنظیمات مختلف build کنید. برای مثال نیاز داریم پروژه را روی سیستم local با یکسری تنظیمات مخصوص build بگیریم جهت توسعه و تست اما برای انتشار نسخه ی product با استفاده از تنظیمات متفاوت پروژه build شود این تنظیمات می تواند شامل تنظیمات دیتابیس و ... باشد

برای فعال کردن buildهای مختلف، می‌توانید پروفایل‌های build مختلفی را به فایل‌های POM خود اضافه کنید.
به مثال زیر توجه کنید:

<profiles> <profile> <id>dev</id> <activation> <!-- this profile is active by default --> <activeByDefault>true</activeByDefault> <!-- activate if system properties 'env=dev' --> <property> <name>env</name> <value>dev</value> </property> </activation> <properties> <db.driverClassName>com.mysql.jdbc.Driver</db.driverClassName> <db.url>jdbc:mysql://localhost:3306/dev</db.url> <db.username>mkyong</db.username> <db.password>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</db.password> </properties> </profile> <profile> <id>prod</id> <activation> <!-- activate if system properties 'env=prod' --> <property> <name>env</name> <value>prod</value> </property> </activation> <properties> <db.driverClassName>com.mysql.jdbc.Driver</db.driverClassName> <db.url>jdbc:mysql://live01:3306/prod</db.url> <db.username>mkyong</db.username> <db.password>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</db.password> </properties> </profile> </profiles>

به عنوان مثال ما در اینجا دو پروفایل داریم یکی dev که پروفایل پیشفرض است و دیگری prod که دو تنظیمات متفاوت برای دیتابیس را ارائه میکنند.

دستور زیر را برای اجرای فاز Compile روی پروفایل prod اجرا میکنیم

mvn compile -P prod

پلاگین ها (Build Plugins):

پلاگین بخش اجرایی maven است، پلاگین ها برای ایجاد فایل های jar، ایجاد فایل های war، کامپایل کد، unit test، ایجاد مستندات پروژه(documentation)، و غیره استفاده می شوند. تقریباً هر عملی که فکر می‌کنید روی یک پروژه انجام دهید، به عنوان یک پلاگین Maven پیاده‌سازی می‌شود. مثلا maven-jar-plugin برای تولید jar فایل پروژه یا پلاگین protobuf-maven-plugin برای تبدیل فایل های proto که برای grpc هستن به کلاس جاوا.

برای مثال در پروژه های SpringBoot ما به پلاگین spring-boot-maven-plugin جهت اجرای فاز های مختلف نیاز داریم که در مثال زیر پلاگین ما از lombok نیز پشتیبانی میکند.

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>

بررسی فایل POM:

دراینجا شما یک نمونه از فایل pom.xml را مشاهده می کنید

<project xmlns=&quothttp://maven.apache.org/POM/4.0.0&quot xmlns:xsi=&quothttp://www.w3.org/2001/XMLSchema-instance&quot xsi:schemaLocation=&quothttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot> <modelVersion>4.0.0</modelVersion> <groupId> com.project.loggerapi </groupId> <artifactId>LoggerApi</artifactId> <version>0.0.1-SNAPSHOT</version> <profiles> <profile> <!-- ... --> </profile> </profiles> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.0</version> </dependency> <!-- ... --> </dependencies> <build> <plugins> <!-- ... --> </plugins> </build> </project>
  • یک) project: این element اصلی فایل pom.xml است.
  • دو) modelVersion: به این معنی است که از چه نسخه ای از مدل POM استفاده می کنید. از نسخه 4.0.0 برای maven 2 و maven 3 استفاده کنید.
  • سه) groupId: یک شناسه یونیک است که معمولا مشابه پکیج پروژه قرار میگیرد و معکوس دامنه شرکت یا سازنده به همراه نام پروژه را قرار می دهند به عنوان مثال com.project.loggerapi
  • چهار) artifactId: برای نامگذاری پروژه ای که می سازید استفاده می شود. در مثال ما نام پروژه ما LoggerApi است.
  • پنج) version: شماره نسخه پروژه است.
  • شش) profiles: جهت ایجاد پروفایل های مختلف همانطور که قبلا گفتیم.
  • هفت) build: مکان قرار دادن پلاگین های مختلف Maven است
maven چیتmavenآموزش mavenجاوا mavenپروژه maven
شاید از این پست‌ها خوشتان بیاید