JavaRush /جاوا بلاگ /Random-UR /ہر وہ چیز جو آپ ماون کے بارے میں جاننا چاہتے تھے - "جاوا ...

ہر وہ چیز جو آپ ماون کے بارے میں جاننا چاہتے تھے - "جاوا پروجیکٹ A سے Z تک"

گروپ میں شائع ہوا۔
تمام دوستوں کو سلام۔ میں فوراً معافی مانگنا چاہوں گا: مجھے یاد ہے کہ میں نے وعدہ کیا تھا کہ میں ہفتے میں ایک بار مضمون لکھوں گا۔ کام نہیں ہوا۔ میں نے ابھی بیٹھ کر صحیح طریقے سے لکھنا نہیں پایا ہے، لیکن میں اسے اس طرح یا اس طرح نہیں کرنا چاہتا۔ میں وجوہات کے بارے میں نہیں روؤں گا، کیونکہ مجھے اس کی ضرورت نہیں ہے، اور آپ کو یقینی طور پر دلچسپی نہیں ہے۔ پروجیکٹ مردہ نہیں ہے، یہ جمود میں تھا :) ہم جاری رکھیں گے! اور آج کا مواد ماون کے لیے وقف ہے۔ "A to Z" جاوا پروجیکٹ: ہر وہ چیز جو آپ Maven - 1 کے بارے میں جاننا چاہتے تھے۔

آئیے ماون کے بارے میں بات کرتے ہیں۔

سب سے پہلے آپ کو اسے انسٹال کرنے کی ضرورت ہے۔ یقینا، چونکہ میرے پاس میک ہے، میں صرف میک کے لیے انسٹالیشن دکھا سکتا ہوں۔ یہ صرف بدقسمتی ہے. میں نے اسے کافی عرصہ پہلے انسٹال کیا تھا، لہذا آپ کو خود ہی کرنا پڑے گا :)
ماون کو انسٹال کرنے کی ہدایات اس مواد میں موجود ہیں ۔

ہمیں میون کی ضرورت کیوں ہے؟

ماون گریڈل اور اینٹ کے ساتھ ایک پروجیکٹ بنانے کا ٹول ہے۔ صرف اس لیے کہ میں اسے JRTB (JavaRush Telegram Bot) میں استعمال کروں گا، میں آپ کو تازہ ترین لانا چاہتا ہوں۔ آج کل، ایک بھی منصوبہ اسمبلی کے نظام کے بغیر نہیں بنایا جاتا، کیونکہ یہ ہماری زندگی کو کئی گنا زیادہ آسان بنا دیتا ہے۔ یہ اجازت دیتا ہے:
  • • تمام ضروری لائبریریوں کو کھینچیں (اسمبلی کے اوزار کے لحاظ سے - انحصار (یعنی انحصار))؛
  • • بالکل اس بات کا تعین کریں کہ پروجیکٹ کو کس طرح مرتب کرنے کی ضرورت ہے اور کس چیز میں (مثال کے طور پر، کیا ہم WAR یا JAR یا قابل عمل JAR میں بنانا چاہتے ہیں)؛
  • • پروجیکٹ ورژن کو ایک جگہ پر سیٹ کریں تاکہ اسمبلی کے دوران اس کی نشاندہی ہو؛
  • • پروجیکٹ اور اس کے لائف سائیکل کی وضاحت کریں۔
  • • نام نہاد پلگ ان شامل کریں (انگریزی لفظ Plugin کا ​​روایتی ورژن)؛
  • • لائبریریوں کو مشترکہ ذخیرہ میں شائع کریں تاکہ دوسرے پروجیکٹس ان کو انحصار کے طور پر کھینچ سکیں۔
عام طور پر، وہ بہت ساری چیزیں کرتا ہے، اور وہ سب مفید ہیں. میں یہ کہوں گا: نوسکھئیے انجینئرز کے لیے یہ ضروری نہیں ہے کہ وہ کور سے لے کر کور تک تمام فعالیت کو جانیں۔ یہاں، جیسا کہ گٹ کے ساتھ، بنیادی باتوں اور عمومی تصورات کو سمجھنا ضروری ہے۔ یہ وہی ہے جو ہم کریں گے. ہمارے لیے، Maven pom.xml نامی ہمارے پروجیکٹ کے روٹ میں ایک XML فائل سے شروع ہوتا ہے ۔ ہم عملی طور پر سب کچھ کریں گے، لہذا پہلے ہم JavaRush کمیونٹی میں اپنا پہلا پروجیکٹ بنائیں گے۔ سب کچھ دانشمندی سے کرنے کے لیے، میں ریپوزٹری کے لیے ایک ٹیمپلیٹ استعمال کروں گا ، جہاں بنیادی چیزیں جو میں نے JR پر ایک بار بیان کی تھیں، پہلے سے ہی ترتیب دی گئی ہیں ۔ تخلیق کرنے کے لیے، ٹیمپلیٹ کے ساتھ ریپوزٹری پر جائیں اور اس ٹیمپلیٹ کا استعمال کریں بٹن پر کلک کریں : "A سے Z تک جاوا پروجیکٹ": ہر وہ چیز جو آپ Maven - 2 کے بارے میں جاننا چاہتے تھے۔نتیجے کے طور پر، ہمارے پاس اپنی کمیونٹی میں پہلا ذخیرہ ہے :) ہم پروجیکٹ کو مقامی طور پر ڈاؤن لوڈ کرتے ہیں۔ ایسا کرنے کے لیے، آئیڈیا کے ذریعے، File -> New -> Project from Version Control پر جائیں ۔ ظاہر ہونے والی ونڈو میں، Github پر پروجیکٹ کا ایک لنک درج کریں (نتیجہ بہتر ہوگا اگر ہر کوئی ایک ہی پروجیکٹ کو الگ الگ بنائے اور میرے ساتھ تمام مراحل سے گزرے): "A سے Z تک جاوا پروجیکٹ": ہر وہ چیز جو آپ Maven - 3 کے بارے میں جاننا چاہتے تھے۔کلک کریں Clone ، اور پروجیکٹ کلون ہوگیا ہے ۔

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">
اور ہر چیز کے اوپر، اگلی لائن بھی تمام pomniks میں لکھی جاتی ہے (slang قیاس 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>
یہاں اہم چیز:
  • گروپ آئی ڈی ترقیاتی تنظیم یا انفرادی انجینئر کا شناخت کنندہ ہے۔ یہ عام طور پر معکوس ترتیب میں ڈومین ہوتا ہے۔ مثال کے طور پر، Github پر romankh3 اکاؤنٹ یہاں بیان کیا گیا ہے۔ یہ بہت اہم ہے. آئیے کہتے ہیں کہ بہار کے ماحولیاتی نظام کے لیے یہ com.springframework ہے ۔ اس طرح آپ اصل پروجیکٹ کو کسی اور کے کانٹے سے یا صرف پروجیکٹ کے نام کے اتفاق سے الگ کر سکتے ہیں۔
  • artifaceId پہلے سے ہی ایک مخصوص پروجیکٹ کا نام ہے جو اس میموری میں بیان کیا گیا ہے۔
  • ورژن — اس پروجیکٹ کا ورژن۔ یہاں ہر چیز روز روشن کی طرح واضح ہے: نئی فعالیت شامل کی گئی، پرانی کو درست کیا گیا، ریفیکٹر کیا گیا یا کچھ دوسری تبدیلیاں کی گئیں۔
  • پیکیجنگ - یہاں ہم بیان کرتے ہیں کہ ماون کو ہمارے پروجیکٹ کو کیسے اکٹھا کرنا چاہیے۔ یا تو جار میں، یا جنگ میں، یا کچھ اور ۔
  • نام - یہاں پراجیکٹ کے لیے ایک زیادہ خوش کن نام ہے۔
ابھی بھی کچھ چیزیں ایسی ہیں جنہیں بھرنے کی ضرورت نہیں ہے - 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>
یہاں میں نے جانچ کے لیے دو لائبریریاں شامل کیں: ان کی ہمیشہ ضرورت رہتی ہے۔ جیسا کہ آپ نے پہلے ہی دیکھا ہوگا، انحصار کا دائرہ کار ہوتا ہے۔ ہمارے معاملے میں ، 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/> block آتا ہے ، جس میں ایک اہم <plugins/> block ہوتا ہے ، جس کے ساتھ آپ تعمیر کے عمل کو اپنی مرضی کے مطابق بنا سکتے ہیں۔ آپ <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 انجام دے سکتا ہے۔ ماون لائف سائیکل کے علاوہ اور بھی کام ہوسکتے ہیں۔ اس کے بارے میں کیا ہے؟ کمانڈز کا ایک سیٹ ہے جس کے ساتھ آپ ایک پروجیکٹ کو جمع کر سکتے ہیں ( بلڈ ... دوبارہ، یقیناً انگریزی سے ایک ٹریسنگ پیپر، لیکن اس کے بغیر کہیں نہیں ہے)، ماون نے جمع کردہ بلڈ کو ڈیلیٹ کریں، ماون لوکل میں انسٹال کریں تاکہ آپ مقامی طور پر اس منصوبے کو انحصار کے طور پر کھینچیں، وغیرہ۔ اب ہر چیز کے بارے میں مزید تفصیل سے بات کرتے ہیں۔ ان ٹیموں کے بارے میں اپنی رائے لکھنے سے پہلے، میں نے فیصلہ کیا کہ وہ اس معاملے کے بارے میں انٹرنیٹ پر کیا لکھ رہے ہیں... اور محسوس کیا کہ اسے بیان کرنا بہت مشکل ہے۔ کام کے لیے، ابتدائی کام کے لیے، ہمیں کئی کمانڈز کی ضرورت ہے ۔ آئیے ان کی وضاحت کرتے ہیں:
  • مرتب کریں - پروجیکٹ کو مرتب کریں۔ یہ پہلا مرحلہ ہے: اس کے دوران آپ دیکھ سکتے ہیں کہ آیا پراجیکٹ میں تالیف کی کوئی خامی ہے۔ بعض اوقات IDEA میں کام کرنے کے ساتھ مختلف لیپ فراگ ہوتے ہیں، یہی وجہ ہے کہ تالیف کے مسائل ایسے ظاہر ہوتے ہیں جہاں ان کا وجود نہیں ہونا چاہیے۔ تو یہ کمانڈ تمام i's کو ڈاٹ کرے گا۔
  • ٹیسٹ - وہ تمام ٹیسٹ چلاتا ہے جو JUnit پر چلتے ہیں اور وہیں واقع ہیں جہاں Maven ان کی توقع کرتا ہے ( src/test/java آپ کا کپتان ہے)۔
  • پیکیج اگلی کمانڈ ہے، جس میں دو پچھلی کمانڈ شامل ہیں: یعنی compile کمانڈ کو پہلے اس کے اندر لانچ کیا جاتا ہے، پھر ٹیسٹ کمانڈ کمپائلڈ پروجیکٹ کو بھیجی جاتی ہے ، اور اگر یہاں سب کچھ ٹھیک ہے، تو آرکائیو کی تخلیق شروع ہو جاتی ہے۔ (آرکائیو جسے ہم <packaging/> میں منتخب کرتے ہیں))
  • انسٹال کریں - جب ہم Maven کو مشین پر انسٹال کرتے ہیں، تو ہمارے پاس ایک مقامی Git ریپوزٹری ہوتی ہے جو لائبریریوں کو اسٹور کرتی ہے جنہیں ہم پروجیکٹس کے لیے ڈاؤن لوڈ کرتے ہیں۔ لیکن ماون کی خوبصورتی یہ ہے کہ ہم اپنے پروجیکٹ کو مقامی گٹ ریپوزٹری میں شامل کرنے کے لیے انسٹال کمانڈ کا استعمال کرسکتے ہیں اور اپنے پروجیکٹ کو مقامی طور پر انحصار کے طور پر استعمال کرسکتے ہیں۔ مجھ پر یقین نہیں ہے؟ اسے آزمائیں :) اس طرح آپ تیزی سے دیکھ سکتے ہیں کہ آپ کا پروجیکٹ کسی دوسرے پر انحصار کی طرح نظر آئے گا۔
  • تعیناتی ہر اس چیز کا تاج ہے جو پہلے آئی تھی۔ ایک کمانڈ جو کسی پروجیکٹ کو نہ صرف انسٹال کے طور پر مقامی ریپوزٹری میں شامل کرنے کی صلاحیت فراہم کرتی ہے، بلکہ ایک دور دراز میں بھی، جہاں سے ہر کوئی اسے انحصار کے طور پر استعمال کرسکتا ہے۔
  • verify - ایک کمانڈ جو ہر چیز کی جانچ کرے گی اور بتائے گی کہ آیا پروجیکٹ تعیناتی کے لیے تیار ہے۔
  • صاف - یقینا، مرتب شدہ فائلیں اور محفوظ شدہ دستاویزات کو کہیں محفوظ کیا جانا چاہیے۔ ماون کے پاس اس کے لیے ایک ٹارگٹ فولڈر ہے ۔ یہ وہ ڈیٹا ہے جس کی پروجیکٹ کو ضرورت نہیں ہے۔ اور پروجیکٹ کو دوبارہ جمع کرنے سے پہلے، یہ سب کچھ حذف کرنا اچھا ہوگا جو پہلے آیا تھا۔ کلین کمانڈ اسی کے لیے ہے ۔

ماون پلگ انز

میں پلگ ان کے بارے میں مزید بات کرنا چاہتا تھا، لیکن مضمون پہلے ہی طویل ہے۔ یہ آپ کا ہوم ورک ہوگا۔ سمجھیں کہ یہ کیا ہے اور اسے کیسے استعمال کیا جائے۔ مضمون کے تسلسل میں، ہم عملی طور پر Maven کے ساتھ معاملہ کریں گے.

سیریز کے تمام مواد کی فہرست اس مضمون کے شروع میں ہے۔

تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION