معرفی
مِیوِن (Maven) ابزار متنباز ساخت و مدیریت وابستگی برای پروژههای Java است. توسعهدهنده با تعریف تنظیمات پروژه در فایل pom.xml مشخص میکند پروژه به چه کتابخانههایی نیاز دارد، چگونه کامپایل شود، آزمونهایش چگونه اجرا شوند و خروجی نهایی با چه قالبی تولید شود. نکات مهم در مورد این ابزار عبارتاند از:
ساختار و اجرای پروژه: برای شروع، یک پروژه دارای pom.xml را باز کنید یا با الگوی اولیه Maven بسازید. سپس دستور mvn test را اجرا کنید تا وابستگیها resolve شوند، کد کامپایل شود و آزمونها اجرا شوند. یک وابستگی را در بخش dependencies فایل pom.xml اضافه کنید و دوباره دستور را اجرا کنید تا ساخت پایه پروژه تأیید شود.
مدیریت مخازن و پایداری ساخت: Maven وابستگیها را از مخزنهای تعریفشده دریافت میکند و قواعد نسخه را از POM اعمال میکند. این کار به اعضای تیم و سرور CI کمک میکند با یک پیکربندی مشترک پروژه را بهصورت تکرارپذیر بسازند. جزئیات مدل POM در مستندات رسمی POM قابل بررسی است.
ملاحظات فنی، عیبیابی و جریانکاری
کار با Maven همیشه بیدردسر نیست. خطاهای resolution ممکن است از نام یا نسخه نادرست artifact، دسترسی شبکه یا تنظیمات مخزن ناشی شوند. وابستگیهای گذرا نیز گاهی نسخههای ناسازگار وارد پروژه میکنند. در جریان کاری تیمی، Git برای نگهداری نسخههای pom.xml و کد پروژه به کار میرود و Jenkins میتواند دستورهای Maven را در خط لوله CI اجرا کند. توسعهدهنده بکاند تنظیمات ساخت را تغییر میدهد و مهندس دواپس اجرای تکرارپذیر آن را در خط لوله پیکربندی میکند.
ویژگیهای کلیدی
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
مدیریت وابستگیها
کتابخانهها و وابستگیهای غیرمستقیم را از مخزنها دریافت میکند و نسخه آنها را در pom.xml قابل ردیابی نگه میدارد. مستندات رسمی: maven.apache.org
-
چرخه ساخت استاندارد
مرحلههای مشخصی مانند validate، compile، test، package، verify، install و deploy دارد تا ساخت پروژه بین محیطها یکسان بماند. مستندات رسمی: maven.apache.org
-
ساختار قراردادی پروژه
برای محل کد اصلی، آزمونها و منابع پروژه قرارداد مشخصی دارد؛ بنابراین ابزارها و اعضای جدید تیم سریعتر ساختار پروژه را میفهمند. مستندات رسمی: maven.apache.org
-
سامانه افزونهها
با افزونهها میتوان کامپایل، اجرای آزمون، تولید گزارش پوشش کد، ساخت فایل JAR یا WAR و انتشار بسته را به فرایند ساخت افزود. مستندات رسمی: maven.apache.org
-
مدیریت نسخه در پروژههای چندماژوله
برای پروژههای بزرگ دارای چند ماژول، امکان ساخت یکجا، اشتراک تنظیمات و هماهنگ نگهداشتن نسخه وابستگیها را فراهم میکند.
-
استفاده از مخزن محلی
وابستگیهای دریافتشده را در مخزن محلی نگه میدارد تا ساختهای بعدی سریعتر شوند و وابستگیها در هر بار دانلود نشوند. مستندات رسمی: maven.apache.org
کاربردها
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
ساخت سرویس Spring Boot
برای تعریف starterها، اجرای آزمونها و تولید فایل اجرایی JAR در پروژههای Spring Boot، معمولاً از pom.xml و دستورهای Maven استفاده میشود.
-
مدیریت کتابخانههای یک پروژه Java
وقتی پروژه به کتابخانههایی مانند درایور پایگاه داده، ابزار ثبت رویداد یا چارچوب آزمون نیاز دارد، Maven دریافت و نسخهبندی آنها را متمرکز میکند.
-
اجرای ساخت در CI/CD
در خط لوله یکپارچهسازی مستمر، Maven میتواند کد را کامپایل کند، آزمونها را اجرا کند و artifact تولید کند. بررسی کیفیت، امضا، انتشار یا استقرار artifact باید جداگانه در خط لوله تیم پیکربندی شود.
-
پروژههای Java چندماژوله
تیمهایی که سرویسها یا کتابخانههای داخلی متعددی دارند، از parent POM برای اشتراک تنظیمات ساخت و نسخه وابستگیها استفاده میکنند.
ابزارهای جایگزین
پرسشهای رایج درباره مِیوِن
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
آیا Maven فقط برای پروژههای Java است؟
کاربرد اصلی Maven در اکوسیستم Java و JVM است. پروژههای Kotlin نیز میتوانند از آن استفاده کنند، اما در پروژههای جدید Kotlin و Android، Gradle نیز بسیار رایج است.
فایل pom.xml چه کاری انجام میدهد؟
این فایل شناسه پروژه، نسخه، وابستگیها، افزونهها، تنظیمات ساخت و ماژولهای پروژه را تعریف میکند. Maven بر اساس همین فایل فرایند ساخت را اجرا میکند.
تفاوت Maven و Gradle چیست و کدام را انتخاب کنم؟
Maven بر پیکربندی XML، چرخه ساخت قراردادی و ساختار استاندارد پروژه تکیه دارد. Gradle با اسکریپتهای Kotlin یا Groovy انعطاف بیشتری برای منطق سفارشی ساخت میدهد، اما نگهداری build scriptهای پیچیده میتواند هزینه بیشتری داشته باشد. اگر تیم یا پروژه فعلی pom.xml دارد، معمولاً ادامه با Maven کمهزینهتر است. برای پروژههای Android، Gradle انتخاب رایج اکوسیستم است. در پروژه جدید Java، میزان سفارشیسازی ساخت و توان تیم در نگهداری اسکریپتها معیار اصلی انتخاب است.
برای کار با Spring Boot باید Maven یاد بگیرم؟
اگر پروژه Spring Boot شما با Maven ساخته شده است، باید دستکم خواندن pom.xml، افزودن وابستگی، اجرای آزمون و ساخت خروجی را یاد بگیرید. Spring Boot از Gradle نیز پشتیبانی میکند.
چرا Maven یک وابستگی را دانلود نمیکند؟
نام یا نسخه وابستگی، دسترسی به مخزن، تنظیمات پراکسی یا کش محلی را بررسی کنید. پیام خطای Maven معمولاً مشخص میکند کدام artifact یا مخزن پیدا نشده است.