JavaRush /جاوا بلاگ /Random-SD /سڀ ڪجھ توھان ڄاڻڻ چاھيو ٿا Maven بابت - "جاوا پروجيڪٽ A ک...

سڀ ڪجھ توھان ڄاڻڻ چاھيو ٿا Maven بابت - "جاوا پروجيڪٽ A کان Z تائين"

گروپ ۾ شايع ٿيل
سڀني کي سلام، پيارا دوست. مان فوري طور تي معافي وٺڻ چاهيان ٿو: مون کي ياد آهي ته مون واعدو ڪيو هو ته آئون هفتي ۾ هڪ ڀيرو هڪ مضمون لکندس. ڪم نه ڪيو. مون وٽ ويهڻ ۽ صحيح لکڻ جي آس پاس نه آهي، پر مان اهو نٿو ڪرڻ چاهيان ته هن طريقي سان يا اهو. مان سببن جي باري ۾ روئڻ نه ڏيندس، ڇو ته مون کي ان جي ضرورت نه آهي، ۽ توهان کي ضرور دلچسپي نه آهي. پروجيڪٽ مئل ناهي، اهو اسٽيسس ۾ هو :) اسان جاري رکون ٿا! ۽ اڄ جي مواد Maven لاء وقف آهي. "جاوا پروجيڪٽ A کان Z تائين": سڀ ڪجهه جيڪو توهان Maven بابت ڄاڻڻ چاهيو ٿا - 1

اچو ته ميون جي باري ۾ ڳالهايون

پهرين توهان کي انسٽال ڪرڻ جي ضرورت آهي. يقينن، جيئن مون وٽ هڪ Mac آهي، مان صرف هڪ Mac لاء انسٽاليشن ڏيکاري سگهان ٿو. اهو صرف خراب قسمت آهي. مون ان کي هڪ ڊگهو وقت اڳ نصب ڪيو، تنهنڪري توهان کي اهو ڪرڻو پوندو :)
Maven انسٽال ڪرڻ لاء هدايتون هن مواد ۾ آهن .

اسان کي ميون جي ضرورت ڇو آهي؟

Maven ھڪڙو منصوبو تعمير ڪرڻ وارو اوزار آھي، گڏوگڏ Gradle ۽ Ant. صرف ان ڪري جو مان ان کي JRTB (JavaRush Telegram Bot) ۾ استعمال ڪندس، مان توھان کي تازه ڪاري ڪرڻ چاھيان ٿو. اڄڪلهه، هڪ به منصوبو بغير اسيمبليء جي سسٽم کان سواء پيدا نه ڪيو ويو آهي، ڇاڪاڻ ته اهو اسان جي زندگي کي ڪيترائي ڀيرا آسان بڻائي ٿو. هي اجازت ڏئي ٿو:
  • • سڀني ضروري لائبريرين کي ڇڪيو (اسمبلي لاء اوزار جي لحاظ کان - انحصار (يعني انحصار)؛
  • • اهو طئي ڪيو ته ڪيئن پروجيڪٽ کي مرتب ڪرڻ جي ضرورت آهي ۽ ڇا ۾ (مثال طور، ڇا اسان هڪ WAR يا JAR يا قابل عمل JAR ۾ تعمير ڪرڻ چاهيون ٿا)؛
  • • پروجيڪٽ ورزن کي ھڪڙي جڳھ تي سيٽ ڪريو ته جيئن ان کي اسيمبليء ۾ اشارو ڪيو وڃي.
  • • منصوبي ۽ ان جي زندگي جي چڪر کي بيان ڪريو؛
  • • نام نهاد پلگ ان شامل ڪريو (انگريزي لفظ پلگ ان جو روايتي نسخو)؛
  • • لائبريرين کي گڏيل ذخيري ۾ شايع ڪيو وڃي ته جيئن ٻيا پروجيڪٽ انهن کي انحصار جي طور تي ٺاهي سگهن.
عام طور تي، هو تمام گهڻو ڪم ڪري ٿو، ۽ اهي سڀئي مفيد آهن. مان هن کي چوندس: نوان انجنيئرن لاء اهو ضروري ناهي ته سڀني ڪارڪردگي کي ڍڪڻ کان ڍڪ تائين ڄاڻڻ ضروري آهي. هتي، جيئن گٽ سان، اهو ضروري آهي ته بنياديات ۽ عام مفهومن کي سمجهڻ. اھو اھو آھي جيڪو اسان ڪنداسين. اسان لاء، Maven اسان جي منصوبي جي روٽ ۾ هڪ XML فائل سان شروع ٿئي ٿو pom.xml . اسان سڀ ڪجھ عملي طور تي ڪنداسين، تنھنڪري پھريون پھريون پروجيڪٽ ٺاھينداسين JavaRush ڪميونٽي ۾. هر شي کي عقلمنديءَ سان ڪرڻ لاءِ، مان هڪ ٽيمپليٽ استعمال ڪندس مخزن لاءِ ، جتي بنيادي شيون جيڪي مون JR تي هڪ ڀيرو بيان ڪيون آهن، اهي اڳ ۾ ئي ترتيب ڏنل آهن . ٺاھڻ لاءِ، ٽيمپليٽ سان مخزن ڏانھن وڃو ۽ ھن ٽيمپليٽ کي استعمال ڪريو بٽڻ تي ڪلڪ ڪريو : "جاوا پروجيڪٽ A کان Z تائين": سڀ ڪجهه جيڪو توهان Maven بابت ڄاڻڻ چاهيو ٿا - 2نتيجي طور، اسان وٽ پنھنجي ڪميونٽي ۾ پھريون ريپوزٽري آھي :) اسان پروجيڪٽ کي مقامي طور تي ڊائون لوڊ ڪريون ٿا. هن کي ڪرڻ لاء، خيال ذريعي، وڃو فائل -> نئون -> پروجيڪٽ کان نسخو ڪنٽرول . ونڊو ۾ جيڪو ظاهر ٿئي ٿو، Github تي پروجيڪٽ جي لنڪ داخل ڪريو (نتيجو بهتر ٿيندو جيڪڏهن هرڪو هڪ ئي پروجيڪٽ الڳ الڳ ٺاهي ۽ مون سان گڏ سڀني مرحلن مان گذري ٿو): ڪلون"جاوا پروجيڪٽ A کان Z تائين": سڀ ڪجهه جيڪو توهان Maven بابت ڄاڻڻ چاهيو ٿا - 3 تي ڪلڪ ڪريو ، ۽ پروجيڪٽ کلون ٿي ويو آهي .

pom.xml هر شيء جو سر آهي

توهان کي هر شي جي ضرورت آهي pom.xml ۾. پروجيڪٽ جي باري ۾ سڀ معلومات، ان جي ڊولپر ۽ ڪهڙي ريموٽ ريپوزٽري تي پروجيڪٽ محفوظ ٿيل آهي. شروعات ۾، اسان هيٺين بلاڪن ۾ دلچسپي رکون ٿا: <project/> - هي مکيه بلاڪ آهي، جنهن ۾ منصوبي بابت سموري معلومات شامل آهي. ٻيا سڀ ان ۾ واضح يا transitively هوندا. افتتاحي ٽيگ جي اندر اهو ڪجهه هن طرح چوي ٿو:
<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 ۾ لکيل آهي (سلانگ سمجهيو ويندو آهي 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 اسان جي منصوبي کي گڏ ڪرڻ گهرجي. يا ته جهر ۾، يا جنگ ۾، يا ڪي ٻيا .
  • نالو - هتي پروجيڪٽ لاءِ وڌيڪ وڻندڙ ​​نالو آهي.
اڃا به ڪجھ شيون آھن جن کي ڀرڻ جي ضرورت ناھي - 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>
هتي مون ٻه لائبريريون شامل ڪيون آهن جاچ لاءِ: اهي هميشه گهربل آهن. جيئن توهان اڳ ۾ ئي محسوس ڪيو هوندو، انحصار جو دائرو آهي. اسان جي صورت ۾ ، ٽيسٽ بيان ڪيو ويو آهي ، جنهن جو مطلب آهي ته اسان صرف هن انحصار کي مکيه ڪوڊ ۾ نه ڏسندا. اڳيون، هر شيءِ کي خوبصورت ڏسڻ لاءِ، توهان <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/> block , هن طرح:
<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 مقامي ۾ انسٽال ڪريو ته جيئن توهان ڪري سگهو ٿا. مقامي طور تي پروجيڪٽ کي انحصار جي طور تي ڇڪايو، وغيره. هاڻي اچو ته هر شيء بابت وڌيڪ تفصيل سان ڳالهايو. انهن ٽيمن جي باري ۾ منهنجي راءِ لکڻ کان اڳ، مون فيصلو ڪيو ته ان معاملي تي انٽرنيٽ تي جيڪي ڪجهه لکي رهيا هئا، ان کي پڙهان... ۽ محسوس ڪيو ته ان کي بيان ڪرڻ ڏاڍو ڏکيو هو. ڪم لاء، شروعاتي ڪم لاء، اسان کي ڪيترن ئي حڪمن جي ضرورت آھي . اچو ته ان کي بيان ڪريون:
  • مرتب ڪريو - پروجيڪٽ گڏ ڪريو. هي پهريون مرحلو آهي: ان دوران توهان ڏسي سگهو ٿا ته پروجيڪٽ ۾ ڪا به تاليف جي غلطيون آهن. ڪڏهن ڪڏهن IDEA ۾ ڪم ڪرڻ سان مختلف ليپ فرگس هوندا آهن، اهو ئي سبب آهي ته تاليف جا مسئلا ظاهر ٿيندا آهن جتي اهي موجود نه هجن. تنهن ڪري هي حڪم سڀني i کي ڊاٽ ڪندو.
  • ٽيسٽ - سڀني ٽيسٽن کي هلائي ٿو جيڪي JUnit تي هلن ٿا ۽ اهي واقع آهن جتي Maven انهن جي توقع ڪري ٿو ( src/test/java توهان جو ڪپتان آهي).
  • پيڪيج ايندڙ ڪمانڊ آهي، جنهن ۾ ٻه پويون شامل آهن: يعني Compile ڪمانڊ پهرين ان جي اندر شروع ڪئي ويندي آهي، پوءِ ٽيسٽ ڪمانڊ مرتب ڪيل پروجيڪٽ ڏانهن موڪليو ويندو آهي ، ۽ جيڪڏهن هتي سڀ ڪجهه ٺيڪ آهي، هڪ آرڪائيو ٺاهڻ شروع ٿئي ٿو. (آرڪائيو جيڪو اسان <packaging/>) ۾ چونڊيو آهي)
  • انسٽال ڪريو - جڏهن اسان مشين تي Maven انسٽال ڪريون ٿا، اسان وٽ هڪ مقامي Git مخزن آهي جيڪو لائبريرين کي محفوظ ڪري ٿو جيڪي اسان پروجيڪٽ لاءِ ڊائون لوڊ ڪريون ٿا. پر Maven جي خوبي اها آهي ته اسان استعمال ڪري سگھون ٿا انسٽال ڪمانڊ اسان جي پروجيڪٽ کي مقامي Git مخزن ۾ شامل ڪرڻ ۽ اسان جي پروجيڪٽ کي مقامي طور تي انحصار طور استعمال ڪريو. مون کي نه مڃيندا آھن؟ ان جي ڪوشش ڪريو :) هن طريقي سان توهان جلدي ڏسي سگهو ٿا ته توهان جو منصوبو ڪيئن نظر ايندو هڪ ٻئي تي انحصار.
  • مقرري هر شيءِ جو تاج آهي جيڪو اڳي آيو. هڪ حڪم جيڪو هڪ پروجيڪٽ کي شامل ڪرڻ جي صلاحيت ڏئي ٿو نه صرف مقامي ريپوزٽري ۾ انسٽال جي طور تي، پر هڪ ريموٽ کي پڻ، جتان هرڪو رسائي سان ان کي انحصار طور استعمال ڪري سگهي ٿو.
  • تصديق ڪريو - ھڪڙو حڪم جيڪو سڀڪنھن شيء کي چيڪ ڪندو ۽ ٻڌائيندو ته ڇا پروجيڪٽ ڊيپلائي ڪرڻ لاءِ تيار آھي.
  • صاف - يقينا، مرتب ڪيل فائلون ۽ آرڪائيو ڪنهن جاءِ تي محفوظ ٿيڻ گهرجن. Maven هن لاء هڪ ٽارگيٽ فولڊر آهي . هي ڊيٽا آهي جنهن جي پروجيڪٽ جي ضرورت ناهي. ۽ منصوبي کي ٻيهر گڏ ڪرڻ کان اڳ، اهو سٺو ٿيندو ته هر شيء کي ختم ڪرڻ لاء جيڪو اڳ آيو هو. اھو اھو آھي جنھن لاء صاف حڪم آھي .

Maven پلگ ان

مون پلگ ان بابت وڌيڪ ڳالهائڻ چاهيو، پر مضمون اڳ ۾ ئي ڊگهو آهي. اهو توهان جو گهر جو ڪم هوندو. سمجھو ته اھو ڇا آھي ۽ ان کي ڪيئن استعمال ڪجي. مضمون جي تسلسل ۾، اسان عملي طور تي Maven سان معاملو ڪنداسين.

سيريز ۾ سڀني مواد جي هڪ فهرست هن مضمون جي شروعات ۾ آهي.

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