**آپاچی ماون** (به انگلیسی: Apache Maven) یک ابزار مدیریت و تعریف پروژه بر پایه مفهوم POM - Project Object Model می‌باشد. Maven به‌معنی مخزن دانش می‌باشد.
Maven یک روش جامع برای مدیریت پروژه از زمان کامپایل تا انتشار تا مستندسازی تا همکاری تیمی فراهم می‌سازد، در یک جمله Maven یک چارچوب مدیریت پروژه (Project Management Framework) می‌باشد.
maven ابزار ساخت و مدیریت پروژه‌های جاوا که تا حدودی شبیه Apache Ant ولی در ساختار کلی متفاوت است. البته می‌توان maven را در پروژه‌های c# , Ruby ,scala و زبان‌های دیگر نیز مورد استفاده قرار داد. maven قسمتی از پروژه Jakarta بود. maven با استفاده از فایل XML پروژه نرم‌افزاری در حال ساخت را توصیف می‌کند که شامل توصیف وابستگی پروژه به ماژول‌ها، کتابخانه‌ها و سایر قطعات نرم‌افزاری دیگر می‌باشد. هم‌چنین برخی از وظایف تعریف شده مانند کامپایل کد و بسته‌بندی نرم‌افزاری را در خود دارد.
maven به‌صورت پویا کتابخانه‌های جاوا و پلاگین‌های خود را از یک یا چند مخزن مانند مخزن مرکزی دانلود کرده و در یک حافظه پنهان (cache) محلی ذخیره می‌کند. این حافظه پنهان (cache) محلی می‌تواند به‌وسیله پروژه‌های محلی به‌روزرسانی شود. مخزن‌های عمومی هم می‌توانند به‌روزرسانی شوند.
MAVEN با استفاده از معماری مبتنی بر پلاگین ساخته شده‌است که به آن اجازه می‌دهد تا از هر برنامه‌ای که از طریق ورودی استاندارد قابل کنترل است استفاده کند. از لحاظ تئوری، این مسئله به همه افراد اجازه می‌دهد تا برای هر زبان دیگری پلاگین‌هایی بنویسند که واسط ابزار ساخت شود(کامپایلرها، ابزار تست واحد، و غیره). در واقع، پشتیبانی و استفاده برای زبان‌های دیگر به‌غیر از جاوا حداقل بوده‌است. در حال حاضر یک پلاگین برای چارچوب دات نت وجود دارد و حفظ می‌شود، [4 و C / C + + پلاگین‌های بومی برای MAVEN 2 نگهداری می‌شده‌است.

پیوند به بیرون
--------------

* وبگاه رسمی

مثال
----

مفاهیم
------

### پروژه مدل شی

یک پروژه مدل شی(POS)فراهم می‌کند همه پیکربندی برای یک تک پروژه. پیکر بندی عمومی پوشش می‌دهد نام پروژه این مالک و این وابستگی بر دیگر پروژه. همچنین می‌توانید یکی از مراحل فردی از فرایند ساخت، که به عنوان اجرا پیکربندی پلاگین. به عنوان مثال، می‌توانید کامپایلر، پلاگین جاوا نسخه 1.5 تا برای تدوین استفاده از پیکربندی، یا مشخص به بسته‌بندی این پروژه حتی اگر برخی از تست واحد با شکست مواجه است.
پروژه‌های بزرگ را باید به ماژول‌های مختلف، یا زیر پروژه‌ها، هر کدام با خود POM خود را تقسیم می‌شود. پس از آن می‌توانید POM ریشه که از طریق آن می‌تواند تمام ماژول را تنها با یک دستور کامپایل ارسال.POMs همچنین می‌توانید تنظیمات را از POMs دیگر به ارث برید. همه POMs از POM سوپر به ارث می‌برند [6] به‌طور پیش‌فرض است. سوپر POM فراهم می‌کند تنظیمات پیش فرض، مانند راهنماها منبع به‌طور پیش فرض، پلاگین به‌طور پیش فرض، و غیره.

### پلاگین‌ها

بسیاری از قابلیت‌های MAVEN در پلاگین (افزایه). پلاگین فراهم می‌کند مجموعه‌ای از اهداف است که می‌تواند با استفاده از سینتکس زیر اجرا شود:

```
 mvn [plugin-name]:[goal-name]

```

به عنوان مثال، یک پروژه جاوا را می‌توان با کامپایلر پلاگین کامپایل هدف وارد شده [7] در حال اجرا توسط mvn compiler:compile کند. پلاگین برای ساخت، تست، مدیریت، منبع کنترل، در حال اجرا یک وب سرور، ایجاد گرفتگی فایل‌های پروژه و بسیار بیشتر است. [8] پلاگین در <plugins> بخش معرفی و پیکربندی pom.xml فایل. بعضی از پلاگین‌های اساسی در هر پروژه به‌طور پیش‌فرض گنجانده شده‌اند و تنظیمات پیش‌فرض محسوس است.

با این حال، این امر می‌تواند دست و پا گیر است اگر یک نفر باید برای اجرای چندین هدف به صورت دستی برای ساخت، تست و بسته‌بندی یک پروژه: 

```
 mvn compiler:compile
 mvn surefire:test
 mvn jar:jar

```

MAVEN در چرخه حیات مفهوم دسته این موضوع است. 
لاگین هستند که راه اصلی برای گسترش MAVEN. توسعه MAVEN پلاگین را می‌توان توسط گسترش کلاس org.apache.maven.plugin.AbstractMojo انجام می‌شود. یک مثال ساده در سایت MAVEN در مرکز صفحه پلاگین توسعه دهندگان داده می‌شود و نمونه دقیق تر در آپاچی MAVEN 3 کتاب خلاصه داده شده‌است. [9]. کد مثال و توضیح برای MAVEN پلاگین برای ایجاد یک ماشین مجازی مبتنی بر ابر سرور برنامه کاربردی در حال اجرا است در این مقاله به‌طور خودکار توسعه و مدیریت ماشین‌های مجازی، ابر داده شده‌است. [10]

### ساختن دوره حیات

چرخه عمر نرم‌افزار لیستی از مراحل به نام است که می‌تواند مورد استفاده قرار گیرد به منظور اجرای هدف است. یکی از lifecycles استاندارد MAVEN چرخه حیات به‌طور پیش فرض، که شامل مراحل زیر است، در این دستور عبارت است از:

```
1. منابع فرایند
2. کامپیل
3. فرایند ازمون و منابع
4. کامپایل ازمون
5. ازمون
6. بسته
7. نصب
8. گسترش

```

اهداف ارائه شده توسط این پلاگین‌ها را می‌توان با مراحل مختلف چرخه حیات همراه است. به عنوان مثال، به‌طور پیش فرض، هدف "کامپایلر کامپایل" با کامپایل فاز همراه، در حالی که هدف "یقین: آزمون با آزمون مرحله همراه است. هنگامی که فرمان

```
ازمون maven
```

اجرا شده است، MAVEN تمام اهداف در ارتباط با هر یک از مراحل تا مرحله تست را اجرا کنید. گل‌های مرتبط با منابع فرایند فاز، پس از آن "گردآورنده: کامپایل"، و به همین ترتیب تا بالاخره اجرا می‌شود: "یقین: آزمون": پس از آن خواهد شد "منابع منابع" اجرای گل.

MAVEN همچنین دارای lifecycles‌های استاندارد برای تمیز کردن این پروژه و برای تولید یک سایت پروژه. اگر تمیز کردن بخشی از چرخه حیات به‌طور پیش‌فرض بود، این پروژه خواهد بود تمیز هر بار از آن ساخته شد. این به وضوح نامطلوب است، بنابراین تمیز کردن چرخه عمر خود آن داده شده‌است.

به lifecycles استاندارد، باید قادر به ساخت، تست و نصب هر MAVEN پروژه با استفاده از فرمان mvn install

### وابستگی

در بخش عنوان مثال اشاره کرد در دست زدن به مکانیسم وابستگی، MAVEN. پروژه‌ای است که نیاز به هایبرنیت کتابخانه به سادگی به اعلام پروژه هایبرنیت مختصات در POM آن است. MAVEN به‌طور خودکار وابستگی و وابستگی که هایبرنیت خود نیاز به (نام متعدی وابستگی) و ذخیره آن‌ها را در مخزن محلی کاربر را دانلود کنید. MAVEN 2 مرکزی مخزن [3] به‌طور پیش‌فرض مورد استفاده قرار می‌گیرد تا برای کتابخانه‌ها جستجو کنید، اما می‌توانید پیکربندی مخازن (مثلاً مخازن شرکت خصوصی) مورد استفاده در POM.

موتورهای جستجو مانند MAVEN مرکزی وجود دارد [12]، که می‌تواند مورد استفاده قرار گیرد برای پیدا کردن مختصات برای کتابخانه‌ها و چارچوب‌های مختلف منبع باز است.

پروژه‌های در حال توسعه بر روی یک ماشین می‌تواند بر روی یکدیگر از طریق مخزن محلی بستگی دارد. مخزن محلی، ساختار پوشه ساده که در عمل هر دو به عنوان حافظه نهان برای وابستگی‌های دریافت و به عنوان محل ذخیره‌سازی مرکزی برای شی ء به صورت محلی ساخته شده‌است. MAVEN دستور mvn install ایجاد یک پروژه و مکان‌های باینری آن در مخزن محلی است. سپس در دیگر پروژه‌ها هم می‌توانید این پروژه را با تعیین مختصات خود را در POMs خود استفاده کنند.

مقایسه با ابزارهای مشابه
------------------------

### مقایسه Maven با Ant

تفاوت اساسی بین MAVEN و مورچه این است که طراحی MAVEN را در مورد تمام پروژه‌ها به عنوان داشتن یک ساختار خاص و مجموعه‌ای از وظیفه پشتیبانی از کار جریان (به عنوان مثال به دست آوردن منابع از کنترل منبع و کامپایل پروژه، آزمایش واحد، و غیره). در حالی که اکثر پروژه‌های نرم‌افزار در واقع حمایت از این عملیات و در واقع یک ساختار تعریف شده، MAVEN مستلزم آن است که این ساختار و عملیات جزئیات پیاده‌سازی در فایل POM تعریف شده‌است. بنابراین، MAVEN متکی بر کنوانسیون در نحوه تعریف پروژه‌ها و در لیست جریان کار است که به‌طور کلی در همه پروژه ها.
ین محدودیت در طراحی است و بیشتر شبیه یک IDE دستگیره پروژه و منافع، مانند بسیاری از پروژه تعریف موجز و امکان یکپارچه‌سازی به صورت خودکار پروژه MAVEN با سایر ابزارهای توسعه از جمله IDE‌های آن را فراهم می‌کند، ساخت سرویس دهنده‌ها، و غیره

حرکت نزولی است که نیاز به یک کاربر به اولین پروژه از MAVEN از دیدگاه و MAVEN با این نسخه‌ها کار با پروژه های، چرا که چه اتفاقی می افتد وقتی که یکی از اجرا مرحله در MAVEN است از بررسی فایل پروژه MAVEN بلافاصله آشکار نیست. این ساختار مورد نیاز است نیز اغلب یک مانع در مهاجرت یک پروژه بالغ به MAVEN، به خاطر آن است که معمولاً سخت از روش‌های دیگر وفق دهند.

در مورچه‌ها، پروژه‌ها از دیدگاه فنی این ابزار واقعاً وجود ندارد. مورچه با این نسخه‌ها کار با XML اسکریپت‌های ساخت تعریف شده در یک یا چند فایل. هدف از این فایل‌ها را پردازش و هر هدف اجرا وظایف است. هر وظیفه انجام عملیات فنی مانند در حال اجرا یک کامپایلر یا کپی کردن فایل‌ها در اطراف. وظایف در درجه اول در نظم داده شده توسط وابستگی تعریف شده خود را در کارهای دیگر اعدام شد. بنابراین، مورچه ابزاری است که زنجیر با هم وظایف و اجرا آن‌ها را در بین وابستگی‌ها و دیگر شرایط بولی است.
مزایای ارائه شده توسط Ant‌ها نیز متعدد است. این است زبان XML بهینه‌سازی شده برای تعریف واضح تر از هر چه کار انجام می‌دهد و آنچه در آن بستگی دارد. همچنین، تمام اطلاعات در مورد چه خواهد بود، هدف مورچه اعدام را می‌توان در اسکریپت مورچه یافت می‌شود.

یک توسعه دهنده با مورچه آشنا نیست به‌طور معمول قادر به تعیین یک اسکریپت ساده مورچه می‌کند که فقط با بررسی اسکریپت باشد. این درست است که معمولاً برای MAVEN نیست. 
ا این حال، حتی توسعه دهندگان با تجربه است که به یک پروژه با استفاده از Ant نمی‌توان استنباط ساختار سطح بالاتر از یک اسکریپت Ant است و آنچه در آن بدون بررسی فیلم‌نامه در جزئیات انجام می‌دهد. با توجه به پیچیدگی اسکریپت، این می‌تواند به سرعت یک چالش دلهره‌آور تبدیل شده‌است. MAVEN، یک توسعه دهنده که قبلاً با سایر پروژه MAVEN کار می‌کرد می‌تواند به سرعت به بررسی ساختار یک پروژه MAVEN پیش از این هرگز دیده می‌شود و اجرای استاندارد MAVEN کار جریان در برابر آن در حالی که در حال حاضر دانستن آنچه به عنوان نتیجه انتظار می‌رود.
مکن است که به استفاده از اسکریپت‌های Ant که تعریف می‌شوند و رفتار به شیوه‌ای یکسان برای همه پروژه‌ها را در یک گروه کاری یا سازمان است. با این حال، هنگامی که تعداد و پیچیدگی پروژه‌ها افزایش می یابد، آن را نیز بسیار آسان است تا از یکنواختی در ابتدا مورد نظر خیره شده بودیم. با MAVEN، این است که کمتر از یک مشکل است زیرا این ابزار همیشه تحمیل یک راه خاص برای انجام کارها.

توجه داشته باشید که این امکان وجود دارد برای گسترش و پیکربندی MAVEN در راه است که حرکت از راه MAVEN از انجام کارهایی است.

ادغام IDE
---------

ضافه کردن فایرفاکس را به چند محبوب محیط توسعه یکپارچه وجود دارد که برای ادغام از MAVEN با ویرایش ساخت محیط برنامه‌نویسی مکانیزم و منبع ابزار اجازه می‌دهد MAVEN به کامپایل پروژه از درون IDE، و همچنین به تنظیم CLASSPATH برای تکمیل کد، برجسته کردن خطاهای کامپایلر، و غیره نمونه‌هایی از IDE‌های توسعه حمایت مردمی با MAVEN عبارتند از:

* Eclipse
* نت‌بینز
* IntelliJ IDEA
* جی‌بیلدر
* جی دولوپر (version 11.1.2)
* MyEclipse

این افزونه همچنین ارائه توانایی را ویرایش کنید POM یا استفاده از POM مجموعه کامل وابستگی‌های پروژه برای تعیین به‌طور مستقیم در داخل محیط برنامه نویسی.

برخی از ویژگی‌های ساخته شده در از پر طرفدارترین IDE ضبط وقتی IDE دیگر انجام تدوین است. به عنوان مثال، JDT گرفتگی است که توانایی یک فایل جاوا به کامپایل مجدد پس از آن ویرایش شده‌است. بسیاری از IDE‌ها با مجموعه‌ای صاف از پروژه‌ها به جای سلسله مراتب پوشه‌ها ترجیح داده شده توسط MAVEN کار می‌کنند. این پیچیده با استفاده از سیستم‌های SCM در IDE‌ها با استفاده از MAVEN. [13] [14] [15]

تاریخچه
-------

Maven ایجاد شده توسط جیسون ون Zyl Sonatype است، به عنوان subproject از توربین آپاچی در سال 2002 آغاز شد. در سال 2003، آن را بر روی انتخاب شد و مورد قبول به عنوان یک سطح بالا بنیاد نرم‌افزار آپاچی پروژه. در ژوئیه 2004، MAVEN به عنوان نقطه عطف مهم اول، V1.0 منتشر شد. MAVEN 2 V2.0 در ماه اکتبر سال 2005 پس از حدود 6 ماه در چرخه‌های بتا اعلام شد. MAVEN 3.0 در اکتبر 2010 منتشر شد و عمدتاً به عقب سازگار با MAVEN 2

آینده
-----

Maven اطلاعات شروع به در 2008 trickling. پس از هشت نسخه‌های آلفا، اولین نسخه بتا از MAVEN 3.0 در آوریل 2010 منتشر شد. MAVEN 3.0 تا دوباره روی پروژه زیرساخت‌های اصلی کشاورزی که POMs فایل مبتنی بر نمایندگی در حال حاضر از شیء در حافظه خود جدا شده‌است. گسترش امکان MAVEN 3.0 افزودنی‌های فایرفاکس به اهرم فایل‌های پروژه غیر تعریف مبتنی بر XML است. زبان پیشنهاد شامل روبی (در حال حاضر در نمونه خصوصی جیسون ون Zyl)، YAML و بر روی. کار تجربی برای YAML مبتنی بر POM فایل تعریف (نیاز به یک اسکریپت تبدیل خارجی اجرا می‌شود) شده‌است توسط سرنشین دان براون از Atlassian است.

توجه ویژه‌ای شده‌است برای اطمینان از سازگاری بین MAVEN 2 و 3 پرداخت می‌شود. برای بسیاری از پروژه‌ها، ارتقاء به MAVEN 3 تنظیم ساختار پروژه خود نیاز ندارند. بتا برای اولین بار از MAVEN 3 دیدم مقدمه‌ای از ساخت یکی از ویژگی‌های موازی که اهرم تنظیم تعداد هسته در ماشین‌های چند هسته‌ای و به خصوص برای پروژه‌های بزرگ چند ماژول مناسب است.

با توجه به ردیاب شماره MAVEN، برنامه‌هایی برای MAVEN 3.1 وجود دارد، اما هیچ برنامه‌ای مشخص یا تاریخ تعیین شده‌است. در حال حاضر کنده بزرگی که پشت اتش بخاری گذارده می‌شود از ویژگی‌های مردمی است.

نرم‌افزارهای مدیریت مخزن مِیوِن
-------------------------------

برای مدیریت مخزن تولیدات میون در کارسازی جدا از ایستگاه‌های توسعه. دو نرم‌افزار شناخته شده nexus و artifactory را می‌توان نام برد. هر دو این نرم‌افزارها دارای یک نسخه اوپن سورس و یک نسخه پشتیبانی شونده pro هستند که دارای افزایه‌هایی برای ایجاد یکپارچگی بیشتر با دیگر ابزارهای توسعه و دادن قابلیت‌های بیشتر دیگری هستند.

همچنین نگاه کنید به
-------------------

* Apache Continuum, a continuous integration server which integrates tightly with Maven
* Apache Archiva, a repository manager commonly used with Maven
* Apache Ant
* Apache Jelly, a tool for turning XML into executable code
* Apache Ivy, alternative dependency management tool for Java
* گریدل a build tool based on convention over configuration
* Sonatype Nexus, a repository manager commonly used with Maven
* Hudson
* List of build automation software

پیوند به بیرون
--------------

1. ↑   Maven Build Lifecycle Reference]

مطالعه بیشتر
------------

منابع
-----

مشارکت‌کنندگان ویکی‌پدیا. «Apache Maven». در *دانشنامهٔ ویکی‌پدیای انگلیسی*.

| * ن
* ب
* و
بنیاد نرم‌افزار آپاچی |
| --- |
| پروژه‌های سطح بالا | 
* Abdera
* Accumulo
* ActiveMQ
* Ambari
* Ant
* Aries
* وب‌سرور آپاچی
* APR
* Avro
* اکسیس
* اکسیس۲
* Bloodhound
* Brooklyn
* Buildr
* Calcite
* Camel
* آپاچی کسندرا
* Cayenne
* Chemistry
* آپاچی کلوداستک
* Cocoon
* Continuum
* آپاچی کوردوا
* کاوچ‌دی‌بی
* CTAKES
* CXF
* Deltacloud
* Derby
* Directory
* Drill
* Empire-db
* Felix
* آپاچی فلکس
* Flink
* آپاچی فلوم
* Forrest
* Geronimo
* Gora
* Gump
* آپاچی هدوپ
* Hama
* اچ‌بیس
* Hive
* Jackrabbit
* James
* JMeter
* کافکا
* Karaf
* Kylin
* لوسین
* ماهوت
* Marmotta
* آپاچی ماون
* MINA
* mod\_perl
* MyFaces
* Nutch
* ODE
* OFBiz
* Oozie
* OpenEJB
* OpenJPA
* OpenNLP
* آپاچی اوپن‌آفیس
* PDFBox
* Phoenix
* POI
* Pig
* Pivot
* Qpid
* River
* Roller
* Samza
* ServiceMix
* Shiro
* Sling
* اسپارک
* Stanbol
* Storm
* SpamAssassin
* Sqoop
* آپاچی استراتس
* آپاچی ساب‌ورژن
* آپاچی تپستری
* آپاچی تریفت
* Tika
* Tiles
* آپاچی تامکت
* Traffic Server
* Turbine
* Tuscany
* UIMA
* Velocity
* آپاچی ویو
* Wicket
* Wink
* Xalan
* Xerces
* ZooKeeper

 | ASF logo |
| پروژه های مشترک | 
* Apache Commons Logging
* BCEL
* BSF
* Daemon
* Jelly

 |
| لوسین | 
* لوسین
* Solr

 |
| آپاچی هدوپ | 
* آپاچی هدوپ
* آپاچی هدوپ

 |
| دیگر پروژه‌ها | 
* Batik
* Chainsaw
* FOP
* Ivy
* لاگ۴جی
* لاگ۴جی
* XAP

 |
| پروژه‌های انکوباتور | 
* XAP

 |
| Apache Attic | 
* AxKit
* Beehive
* Click
* Bluesky
* Cactus
* Jakarta
* Excalibur
* هارمونی
* HiveMind
* Lenya
* Slide
* Shale
* Shindig
* stdcxx
* iBATIS
* XMLBeans

 |
| مجوزها | 
* مجوز آپاچی

 |
| 
* 

**\*** Commons
 |