JavaRush /وبلاگ جاوا /Random-FA /هر آنچه می خواستید در مورد Maven بدانید - "پروژه جاوا از ...
Roman Beekeeper
مرحله

هر آنچه می خواستید در مورد Maven بدانید - "پروژه جاوا از A تا Z"

در گروه منتشر شد
سلام به همه دوستان عزیز. من می خواهم بلافاصله عذرخواهی کنم: یادم می آید که قول داده بودم هفته ای یک بار مقاله بنویسم. به نتیجه نرسید. من فقط نمی‌توانم بنشینم و درست بنویسم، اما نمی‌خواهم این‌طور یا آن‌طور این کار را انجام دهم. من در مورد دلایل غر نمی زنم، زیرا من به آن نیاز ندارم، و شما مطمئناً علاقه ای ندارید. پروژه نمرده، در حالت سکون بود :) ادامه می دهیم! و مطالب امروز به Maven اختصاص دارد. "پروژه جاوا از A تا Z": هر آنچه می خواستید در مورد Maven بدانید - 1

بیایید در مورد Maven صحبت کنیم

ابتدا باید آن را نصب کنید. البته از آنجایی که من مک دارم، فقط می توانم نصب را برای مک نشان دهم. این فقط بدشانسی است. من خیلی وقت پیش نصبش کردم، پس باید خودت انجامش بدی :)
دستورالعمل نصب Maven در این متریال آمده است .

چرا ما به Maven نیاز داریم؟

Maven یک ابزار ساخت پروژه به همراه Gradle و Ant است. فقط به این دلیل که از آن در JRTB (ربات تلگرام جاوا راش) استفاده خواهم کرد، می خواهم شما را به روز کنم. امروزه هیچ پروژه ای بدون سیستم مونتاژ ایجاد نمی شود، زیرا زندگی ما را چندین برابر ساده می کند. این اجازه می دهد:
  • • تمام کتابخانه های لازم را جمع آوری کنید (از نظر ابزارهای مونتاژ - وابستگی ها (یعنی وابستگی)).
  • • تعیین کنید که پروژه دقیقا چگونه و در چه چیزی باید کامپایل شود (برای مثال، آیا می خواهیم در یک WAR یا JAR یا JAR قابل اجرا بسازیم).
  • • نسخه پروژه را در یک مکان تنظیم کنید تا در هنگام مونتاژ نشان داده شود.
  • • پروژه و چرخه عمر آن را شرح دهید.
  • • به اصطلاح پلاگین ها را اضافه کنید (نسخه سنتی کلمه انگلیسی Plugin).
  • • کتابخانه ها را در یک مخزن مشترک منتشر کنید تا پروژه های دیگر بتوانند آنها را به عنوان وابستگی بالا بکشند.
به طور کلی، او کارهای زیادی انجام می دهد و همه آنها مفید هستند. من این را خواهم گفت: برای مهندسان تازه کار لازم نیست همه عملکردها را از پوشش تا پوشش بدانند. در اینجا، مانند git، درک اصول و مفاهیم کلی مهم است. این کاری است که ما انجام خواهیم داد. برای ما، Maven با یک فایل XML در ریشه پروژه خود به نام pom.xml شروع می‌کند . ما همه کارها را در عمل انجام خواهیم داد، بنابراین ابتدا اولین پروژه خود را در انجمن JavaRush ایجاد خواهیم کرد. برای انجام همه کارها عاقلانه، از یک الگو برای مخزن استفاده می کنم ، جایی که موارد اساسی که یک بار در JR توضیح دادم قبلاً پیکربندی شده اند . برای ایجاد، با قالب به مخزن بروید و روی دکمه Use this template کلیک کنید : "پروژه جاوا از A تا Z": هر آنچه می خواستید در مورد Maven بدانید - 2در نتیجه، ما اولین مخزن را در جامعه خود داریم :) ما پروژه را به صورت محلی دانلود می کنیم. برای انجام این کار، از طریق ایده، به File -> New -> Project from Version Control بروید . در پنجره ای که ظاهر می شود، پیوندی به پروژه در Github وارد کنید (اگر همه به طور جداگانه پروژه مشابهی را ایجاد کنند و همه مراحل را با من طی کنند، نتیجه بهتر می شود): روی Clone"پروژه جاوا از A تا Z": هر آنچه می خواستید در مورد Maven بدانید - 3 کلیک کنید و پروژه کلون می شود .

pom.xml سر همه چیز است

هر چیزی که نیاز دارید در pom.xml موجود است. تمام اطلاعات مربوط به پروژه، توسعه دهنده آن و مخزن از راه دور پروژه ذخیره می شود. در ابتدا، ما به بلوک های زیر علاقه مند هستیم: <project/> - این بلوک اصلی است که حاوی تمام اطلاعات پروژه است. بقیه به طور صریح یا گذرا در آن خواهند بود. داخل تگ افتتاحیه چیزی شبیه به این می گوید:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                     http://maven.apache.org/xsd/maven-4.0.0.xsd">
و در کنار همه چیزهای دیگر، خط بعدی نیز در همه پومنیک ها نوشته شده است (عامیانه ظاهراً از pom.xml است :)).
<modelVersion>4.0.0</modelVersion>
اما بعد جالب‌تر می‌شود: ما نحوه شناسایی پروژه‌ای را که یادبود ما توصیف می‌کند، شرح خواهیم داد. با استفاده از کتابخانه خود به عنوان مثال، آن را توصیف می کنم، و سپس آن را به حافظه خود اضافه می کنیم، به پروژه جدید ایجاد شده:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
نکته اصلی اینجا:
  • groupId شناسه سازمان توسعه یا مهندس فردی است. این دامنه معمولاً به ترتیب معکوس است. به عنوان مثال، حساب romankh3 در Github در اینجا توضیح داده شده است. این خیلی مهمه. بیایید برای اکوسیستم Spring بگوییم com.springframework است . به این ترتیب می توانید پروژه اصلی را از فورک شخص دیگری یا صرفاً با همزمانی نام پروژه تشخیص دهید.
  • artifaceId قبلاً نام یک پروژه خاص است که در این حافظه توضیح داده شده است.
  • نسخه —نسخه این پروژه. همه چیز در اینجا مثل روز روشن است: قابلیت های جدید اضافه شده، موارد قدیمی را اصلاح کرده، دوباره ساخته شده یا تغییرات دیگری ایجاد کرده است - نسخه را افزایش داده است.
  • بسته بندی - در اینجا ما توضیح می دهیم که Maven چگونه باید پروژه ما را مونتاژ کند. یا در جار، یا در جنگ، یا برخی دیگر .
  • نام - در اینجا یک نام دلپذیرتر برای پروژه وجود دارد.
هنوز مواردی وجود دارد که اصلاً نیازی به پر کردن آنها نیست - Maven بدون آنها کار خواهد کرد - اما اگر لازم است کتابخانه را برای استفاده عمومی منتشر کنید، قطعاً ارزش افزودن آنها را دارد. این چیزها چیست؟
  • • مسیری به مخزن پروژه، که از آنجا می توان آن را دانلود کرد

    <url>https://romankh3.github.io/image-comparison/</url>

  • • مجوزی که این پروژه تحت آن توزیع می شود. علاوه بر این، ممکن است بیش از یک وجود داشته باشد، و بنابراین باید آن را به این صورت تنظیم کنید:

    <licenses>
     <license>
       <name>The Apache Software License, Version 2.0</name>
       <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
     </license>
    </licenses>

  • • اطلاعات مربوط به توسعه دهندگانی که پروژه را ایجاد کرده اند/در حال ایجاد آن هستند:

    <developers>
     <developer>
       <id>romankh3</id>
       <name>Roman Beskrovnyi</name>
       <email>roman.beskrovnyy@gmail.com</email>
     </developer>
    </developers>

  • • بلوک scm، که نحوه دسترسی به پروژه را شرح می دهد:

    <scm>
    <connection>git@github.com:romankh3/image-comparison.git</connection>
    <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection>
     <url>https://github.com/romankh3/image-comparison</url>
    </scm>

بعد از اینکه اطلاعات کلی را توضیح دادیم، می توانیم یک بلوک با وابستگی ها اضافه کنیم:
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>2.26.0</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>5.5.2</version>
       <scope>test</scope>
   </dependency>
<dependency>
   	<groupId>com.github.romankh3</groupId>
   	<artifactId>image-comparison</artifactId>
   	<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
در اینجا دو کتابخانه برای آزمایش اضافه کردم: آنها همیشه مورد نیاز هستند. همانطور که ممکن است قبلاً متوجه شده باشید، وابستگی ها دارای یک Scope - scope هستند. در مورد ما ، test مشخص شده است ، به این معنی که ما به سادگی این وابستگی را در کد اصلی نخواهیم دید. در مرحله بعد، برای اینکه همه چیز زیبا به نظر برسد، می توانید از یک برچسب جداگانه برای نمایش نسخه های <properties/> استفاده کنید :
<properties>
   <mockito.version>2.26.0</mockito.version>
   <junit.version>5.5.2</junit.version>
   <image.comparison.version>4.3.0</image.comparison.version>
</properties>
بنابراین بلوک وابستگی را می توان با استفاده از ساختار ${PROPERTY_NAME} به روز کرد :
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>${junit.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>com.github.romankh3</groupId>
       <artifactId>image-comparison</artifactId>
       <version>${image.comparison.version}</version>
       <scope>test</scope>
   </dependency>
</dependencies>
بعد یک بلوک بزرگ <build/> می آید که حاوی یک بلوک <plugins/> مهم است که با آن می توانید فرآیند ساخت را سفارشی کنید. می توانید یک یا چند افزونه را در داخل بلوک <plugins/> اضافه کنید ، مانند این:
<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <version>3.2.0</version>
           <executions>
               <execution>
                   <id>attach-sources</id>
                   <goals>
                       <goal>jar</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
در اینجا می بینید که من دو افزونه اضافه کرده ام - maven-source-plugin و maven-javadoc-plugin . هر یک از پلاگین ها دارای تنظیمات، ویژگی ها (پارامترهایی) هستند که می توان آنها را تنظیم کرد و در نتیجه پلاگین ها را سفارشی کرد. این برای ما در آینده جالب خواهد بود. فعلاً به یاد بیاوریم و ادامه دهیم. همانند وابستگی ها، نسخه های افزونه را در <properties/> قرار می دهیم . بر این اساس می توانید حافظه زیر را ایجاد کنید:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        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>com.github.javarushcommunity</groupId>
   <artifactId>maven-demo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>Maven Demo Project</name>

   <url>https://github.com/javarushcommunity/maven-demo/</url>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <source.plugin.version>3.2.0</source.plugin.version>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
           <version>${mockito.version}</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.junit.jupiter</groupId>
           <artifactId>junit-jupiter-api</artifactId>
           <version>${junit.version}</version>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-source-plugin</artifactId>
               <version>${source.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-sources</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-javadoc-plugin</artifactId>
               <version>${javadoc.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-javadocs</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
       </plugins>
   </build>
</project>

چرخه زندگی Maven

Maven چیزی به نام چرخه زندگی maven دارد. شایان ذکر است که این مجموعه ای از وظایف است که یک ماون می تواند انجام دهد. ممکن است غیر از چرخه حیات maven وظایف دیگری نیز وجود داشته باشد. در مورد چیست؟ مجموعه ای از دستورات وجود دارد که با آن می توانید یک پروژه را جمع آوری کنید ( بسازید ... البته دوباره یک مقاله ردیابی از انگلیسی، اما بدون این هیچ جایی نیست)، بیلدهایی را که Maven جمع آوری کرده است حذف کنید، در Maven local نصب کنید تا بتوانید به صورت محلی پروژه را به عنوان یک وابستگی بالا بکشید و غیره. حالا بیایید در مورد همه چیز با جزئیات بیشتر صحبت کنیم. قبل از اینکه نظرم را در مورد این تیم ها بنویسم، تصمیم گرفتم مطالبی را که آنها در اینترنت در مورد این موضوع می نویسند را مطالعه کنم ... و متوجه شدم که توصیف آن بسیار دشوار است. برای کار، برای کار اولیه، به چندین دستور نیاز داریم . بیایید آنها را توصیف کنیم:
  • کامپایل — کامپایل پروژه. این مرحله اول است: در طی آن می توانید ببینید که آیا خطاهای کامپایل در پروژه وجود دارد یا خیر. گاهی اوقات جهش های مختلفی با کار در IDEA وجود دارد، به همین دلیل است که مشکلات کامپایل در جایی که نباید وجود داشته باشند ظاهر می شوند. بنابراین این دستور تمام iها را نقطه‌گذاری می‌کند.
  • test - تمام تست هایی را که روی JUnit اجرا می شوند و در جایی قرار دارند که Maven انتظار آنها را دارد اجرا می کند ( src/test/java کاپیتان شماست).
  • بسته دستور بعدی است که شامل دو دستور قبلی است: یعنی ابتدا دستور کامپایل در داخل آن راه اندازی می شود، سپس دستور تست به پروژه کامپایل شده ارسال می شود و اگر اینجا همه چیز اوکی باشد، ایجاد آرشیو شروع می شود. (بایگانی که در < packaging/> انتخاب می کنیم))
  • install - وقتی Maven را روی یک ماشین نصب می کنیم، یک مخزن Git محلی داریم که کتابخانه هایی را که برای پروژه ها دانلود می کنیم ذخیره می کند. اما زیبایی Maven در این است که می توانیم از دستور install برای اضافه کردن پروژه خود به مخزن محلی Git استفاده کنیم و از پروژه خود به صورت محلی به عنوان یک وابستگی استفاده کنیم. باور نمی کنی؟ آن را امتحان کنید:) به این ترتیب می توانید به سرعت ببینید که چگونه پروژه شما به دیگری وابسته است.
  • استقرار تاج همه چیزهایی است که قبلاً آمده است. دستوری که به شما امکان می دهد پروژه را نه تنها به یک مخزن محلی به عنوان نصب، بلکه به یک مخزن راه دور اضافه کنید، جایی که همه افراد با دسترسی می توانند از آن به عنوان یک وابستگی استفاده کنند.
  • تأیید - فرمانی که همه چیز را بررسی می کند و می گوید که آیا پروژه برای استقرار آماده است یا خیر.
  • پاک - البته فایل های کامپایل شده و آرشیو باید در جایی ذخیره شوند. Maven یک پوشه هدف برای این کار دارد . این داده هایی است که پروژه به آنها نیاز ندارد. و قبل از مونتاژ مجدد پروژه، خوب است که همه موارد قبلی را حذف کنید. این همان چیزی است که دستور پاک برای آن است .

پلاگین های Maven

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

فهرستی از تمام مواد این مجموعه در ابتدای این مقاله است.

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION