JavaRush /Блоги Java /Random-TG /Ҳама чизест, ки шумо дар бораи Maven донистан мехоҳед - "...
Roman Beekeeper
Сатҳи

Ҳама чизест, ки шумо дар бораи Maven донистан мехоҳед - "Лоиҳаи Java аз A то Я"

Дар гурӯҳ нашр шудааст
Салом ба хама, дустони азиз. Мехоҳам дарҳол узр пурсам: дар ёд дорам, ки ваъда дода будам, ки ҳафтае як бор мақола менависам. Коре накард. Ман танҳо ба дуруст нишастан ва навиштан даст нагирифтаам, аммо намехоҳам ин тавр ё он тавр кор кунам. Ман дар бораи сабабҳо шикоят намекунам, зеро ба ман лозим нест ва шумо бешубҳа таваҷҷӯҳ надоред. Лоиҳа мурда нест, он дар ҳолати истода буд :) Мо идома медиҳем! Ва маводи имрӯза ба Maven бахшида шудааст. "Лоиҳаи Java аз А то Я": Ҳама чизеро, ки шумо дар бораи Maven донистан мехоҳед - 1

Биёед дар бораи Maven сӯҳбат кунем

Аввал шумо бояд онро насб кунед. Албатта, азбаски ман Mac дорам, ман метавонам танҳо насбкуниро барои Mac нишон диҳам. Ин танҳо бадбахтист. Ман онро кайҳо пеш насб кардам, бинобар ин шумо бояд онро худатон иҷро кунед :)
Дастурҳо барои насб кардани Maven дар ин мавод мавҷуданд .

Чаро ба мо Maven лозим аст?

Maven як воситаи сохтани лоиҳа дар якҷоягӣ бо Gradle ва Ant мебошад. Танҳо аз он сабаб, ки ман онро дар JRTB (JavaRush Telegram Bot) истифода хоҳам кард, ман мехоҳам шуморо ба навсозӣ расонам. Хозир ягон лоиха бе системаи монтажкунй ба вучуд оварда намешавад, зеро вай хаёти моро чандин баробар осон мекунад. Ин имкон медиҳад:
  • • тамоми китобхонаҳои заруриро кашед (аз нуқтаи назари асбобҳо барои васлкунӣ - вобастагӣ (яъне вобастагӣ));
  • • аниқ муайян кардани он, ки лоиҳа чӣ гуна бояд ҷамъоварӣ карда шавад ва ба чӣ (масалан, мо мехоҳем онро дар WAR ё JAR ё JAR иҷрошаванда ҷамъоварӣ кунем);
  • • versionи лоиҳаро дар як ҷо ҷойгир кунед, то он ҳангоми васлкунӣ нишон дода шавад;
  • • тавсифи лоиҳа ва давраи ҳаёти он;
  • • илова кардани плагинҳо (versionи анъанавии калимаи инглисии Plugin);
  • • китобхонаҳоро дар як анбори муштарак нашр кунед, то лоиҳаҳои дигар онҳоро ҳамчун вобастагӣ бардоранд.
Умуман, вай бисьёр корхоро ичро мекунад ва хамаи онхо фоиданоканд. Ман инро мегӯям: барои муҳандисони навкор донистани тамоми функсияҳо аз сар то сар шарт нест. Дар ин ҷо, мисли git, фаҳмидани асосҳо ва мафҳумҳои умумӣ муҳим аст. Ин аст он чизе ки мо мекунем. Барои мо, Maven бо файли XML дар решаи лоиҳаи мо бо номи pom.xml оғоз меёбад . Мо ҳама чизро дар амал иҷро хоҳем кард, аз ин рӯ аввал лоиҳаи аввалини худро дар ҷомеаи JavaRush эҷод мекунем. Барои он ки ҳама чизро оқилона анҷом диҳед, ман як қолабро барои анбор истифода хоҳам кард , ки дар он чизҳои асосие , ки ман боре дар JR тавсиф карда будам, аллакай танзим шудаанд . Барои эҷод кардан, ба анбор бо қолаб равед ва тугмаро пахш кунед Ин қолабро истифода баред : "Лоиҳаи Java аз A то Я": Ҳама чизеро, ки шумо дар бораи Maven донистан мехоҳед - 2Дар натиҷа, мо аввалин репозиторий дар ҷомеаи худ дорем :) Мо лоиҳаро ба таври маҳаллӣ зеркашӣ мекунем. Барои ин, тавассути идея, ба Файл -> Нав -> Лоиҳа аз Назорати Версия гузаред . Дар равзанаи пайдошуда, истиноди лоиҳаро дар Github ворид кунед (натиҷа беҳтар мешавад, агар ҳама як лоиҳаро алоҳида эҷод кунанд ва ҳама қадамҳоро бо ман гузаранд): Clone -ро"Лоиҳаи Java аз А то Я": Ҳама чизеро, ки шумо дар бораи Maven донистан мехоҳед - 3 клик кунед ва лоиҳа клон карда мешавад .

pom.xml сари ҳама чиз аст

Ҳама чизест, ки ба шумо лозим аст дар pom.xml. Ҳама маълумот дар бораи лоиҳа, таҳиягари он ва дар кадом анбори дурдаст нигоҳ доштани лоиҳа. Дар оғоз, мо ба блокҳои зерин таваҷҷӯҳ дорем: <project/> - ин блоки асосӣ мебошад, ки тамоми маълумотро дар бораи лоиҳа дар бар мегирад. Ҳамаи дигарон дар он ба таври возеҳ ё гузаранда хоҳанд буд. Дар дохor теги кушода он чизе чунин мегӯяд:
<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 дар ин ҷо тавсиф шудааст. Ин хеле муҳим аст. Биёед бигӯем, ки барои экосистемаи баҳор ин com.springframework аст . Бо ин роҳ, шумо метавонед лоиҳаи аслиро аз риштаи ягон каси дигар ё танҳо бо мувофиқати номи лоиҳа фарқ кунед.
  • artifaceId аллакай номи лоиҳаи мушаххасест, ки дар ин хотира тасвир шудааст.
  • version — versionи ин лоиҳа. Ҳама чиз дар ин ҷо ҳамчун рӯз равшан аст: функсияҳои нав илова карда шуданд, кӯҳнаҳои собит, рефакторатсия ё баъзе тағиротҳои дигар ворид карда шуданд - versionро зиёд карданд.
  • бастабандӣ - дар ин ҷо мо тасвир мекунем, ки чӣ тавр 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>
Дар ин ҷо ман ду китобхонаро барои санҷиш илова кардам: онҳо ҳамеша лозиманд. Тавре ки шумо аллакай қайд кардаед, вобастагӣ дорои доираи доираи. Дар ҳолати мо , санҷиш муайян карда шудааст , ки ин маънои онро дорад, ки мо ин вобастаиро дар рамзи асосӣ нахоҳем дид. Минбаъд, барои зебо кардани ҳама чиз, шумо метавонед теги алоҳидаеро барои намоиш додани versionҳои <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/> мебошад , ки бо он шумо метавонед раванди сохтани онро танзим кунед. Шумо метавонед як ё якчанд плагинҳоро дар дохor блоки <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 . Ҳар як плагинҳо дорои танзимот, атрибутҳо (параметрҳо), ки метавонанд танзим карда шаванд ва ба ин васила плагинҳоро танзим кунанд. Ин барои мо дар оянда ҷолиб хоҳад буд. Ҳоло, биёед ба ёд орем ва пеш равем. Ба монанди вобастагӣ, мо versionҳои плагинҳоро дар <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 маҳаллӣ насб кунед, то шумо метавонед ба таври маҳаллӣ наоварад, то лоиҳа ҳамчун вобастагӣ, ва ғайра. Акнун биёед дар бораи ҳама чиз муфассалтар сӯҳбат кунем. Пеш аз навиштани андешаи худ дар бораи ин дастаҳо, ман тасмим гирифтам, ки он чизеро, ки онҳо дар ин бора дар интернет менависанд, мутолиа кунам... ва фаҳмидам, ки тавсиф кардан хеле душвор аст. Барои кор, барои кори аввал ба мо якчанд фармон лозим аст . Биёед онҳоро тавсиф кунем:
  • compile — тартиб додани лоиҳа. Ин марҳилаи аввал аст: дар давоми он шумо метавонед бубинед, ки дар лоиҳа ягон хатогиҳои тартибдиҳӣ вуҷуд доранд. Баъзан бо кор дар IDEA ҷаҳишҳои гуногун вуҷуд доранд, аз ин рӯ мушкилоти тартибдиҳӣ дар ҷое пайдо мешаванд, ки онҳо набояд вуҷуд дошта бошанд. Ҳамин тавр, ин фармон ҳама i-ро нишон медиҳад.
  • санҷиш - ҳамаи санҷишҳоеро иҷро мекунад, ки дар JUnit кор мекунанд ва дар ҷое ҷойгиранд, ки Maven онҳоро интизор аст ( src/test/java капитани шумост).
  • пакет фармони навбатӣ мебошад, ки ду фармони қаблиро дар бар мегирад: яъне фармони компиляция аввал дар дохor он оғоз мешавад, баъд фармони санҷиш ба лоиҳаи тартибдодашуда фиристода мешавад ва агар дар ин ҷо ҳама чиз хуб бошад, эҷоди архив оғоз мешавад. (архив, ки мо дар < packaging/> интихоб мекунем))
  • насб - вақте ки мо Maven-ро дар мошин насб мекунем, мо анбори маҳаллии Git дорем, ки китобхонаҳоеро, ки мо барои лоиҳаҳо зеркашӣ мекунем, нигоҳ медорад. Аммо зебоии Maven дар он аст, ки мо метавонем фармони насбро барои илова кардани лоиҳаи худ ба анбори маҳаллии Git истифода барем ва лоиҳаи худро ҳамчун вобастагӣ истифода барем. Ба ман бовар намекунед? Кӯшиш кунед :) Бо ин роҳ шумо метавонед зуд бубинед, ки лоиҳаи шумо чӣ гуна вобастагӣ аз дигаре хоҳад буд.
  • ҷойгир кардан тоҷи ҳама чизест, ки пештар буд. Фармоне, ки қобorяти илова кардани лоиҳаро на танҳо ба анбори маҳаллӣ ҳамчун насб, балки ба як дурдаст медиҳад, ки аз он ҷо ҳар касе, ки дастрасӣ дорад, метавонад онро ҳамчун вобастагӣ истифода барад.
  • тафтиш - фармоне, ки ҳама чизро тафтиш мекунад ва мегӯяд, ки лоиҳа барои ҷойгиркунӣ омода аст.
  • тоза - албатта, файлҳо ва архиви тартибдодашуда бояд дар ҷое нигоҳ дошта шаванд. Maven барои ин папкаи мақсаднок дорад . Ин маълумотест, ки лоиҳа ба он ниёз надорад. Ва пеш аз аз нав васл кардани лоиха, хуб мебуд, ки хамаи он чизе, ки пеш омада буд, нест карда шавад. Ин аст он чизе ки фармони пок барои он аст .

Плагинҳои Maven

Ман мехостам дар бораи плагинҳо бештар сӯҳбат кунам, аммо мақола аллакай дароз аст. Ин вазифаи хонагии шумо хоҳад буд. Бифаҳмед, ки он чист ва чӣ тавр истифода бурдани он. Дар идомаи мақола мо бо Maven дар амал сару кор хоҳем кард.

Рӯйхати ҳамаи маводҳои силсила дар аввали ин мақола аст.

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION