JavaRush /Java блогу /Random-KY /Maven жөнүндө билгиңиз келгендин баары - "Адан Яга чейин ...
Roman Beekeeper
Деңгээл

Maven жөнүндө билгиңиз келгендин баары - "Адан Яга чейин Java долбоору"

Группада жарыяланган
Баарыңарга салам, кымбаттуу достор. Мен дароо кечирим сурайм: жумасына бир жолу макала жазам деп убада бергеним эсимде. Болбой калды. Мен жөн эле отуруп, туура жазганга жетише элекмин, бирок муну тигиндей же тигини кылгым келбейт. Себептерин айтып ыйлабайм, анткени мага кереги жок жана сизди кызыктырбайсыз. Долбоор өлгөн жок, токтоп турган :) Биз улантабыз! Ал эми бүгүнкү материал Мавенге арналган. "Java долбоору Адан Яга": Maven жөнүндө билгиңиз келгендин баары - 1

Мавен жөнүндө сүйлөшөлү

Биринчиден, аны орнотуу керек. Албетте, менде Mac болгондуктан, мен Mac үчүн орнотууну гана көрсөтө алам. Бул жөн эле жаман ийгorк. Мен аны көп убакыт мурун орноткам, андыктан аны өзүңүз жасашыңыз керек болот :)
Maven орнотуу боюнча көрсөтмөлөр бул материалда .

Эмне үчүн бизге Maven керек?

Maven бул Gradle жана Ant менен бирге долбоор куруу куралы. Мен аны JRTBде (JavaRush Telegram Bot) колдонгонум үчүн, мен сени жаңырткым келет. Бүгүнкү күндө бир дагы долбоор монтаждоо системасы жок түзүлбөйт, анткени ал биздин жашообузду көп эсе жөнөкөйлөтөт. Бул мүмкүнчүлүк берет:
  • • бардык керектүү китепканаларды тартыңыз (жыйноо куралдары боюнча - көз карандылык (б.а. көз карандылык));
  • • Долбоор кандайча жана эмнеге түзүлүшү керек экенин аныктоо (мисалы, биз WAR же JAR же аткарылуучу JAR кургубуз келеби);
  • • долбоордун versionсын чогултуу учурунда көрсөтүлө тургандай кылып бир жерге коюу;
  • • долбоорду жана анын жашоо циклин сүрөттөп берүү;
  • • деп аталган плагиндерди кошуу (англисче Plugin сөзүнүн салттуу versionсы);
  • • Башка долбоорлор аларды көз карандылык катары тарта алышы үчүн китепканаларды жалпы репозиторийде жарыялоо.
Жалпысынан алганда, ал көп нерселерди кылат, жана алардын баары пайдалуу. Мен муну айтайын: башталгыч инженерлер үчүн бардык функцияларды башынан аягына чейин билүү зарыл эмес. Бул жерде, git сыяктуу эле, негизги жана жалпы түшүнүктөрдү түшүнүү маанилүү. Бул биз жасай турган иш. Биз үчүн Maven pom.xml деп аталган долбоордун тамырындагы XML файлынан башталат . Биз бардыгын иш жүзүндө жасайбыз, андыктан алгач JavaRush коомчулугунда биринчи долбоорбузду түзөбүз. Баарын акылдуулук менен жасоо үчүн мен репозиторий үчүн шаблонду колдоном , анда мен JRде бир жолу сүрөттөгөн негизги нерселер конфигурацияланган . Түзүү үчүн, шаблон менен репозиторийге өтүңүз жана бул калыпты колдонуу баскычын басыңыз : "Java долбоору Адан Яга": Maven жөнүндө билгиңиз келгендин баары - 2Натыйжада, биздин коомчулукта биринчи репозиторий бар :) Биз долбоорду жергorктүү түрдө жүктөйбүз. Бул үчүн, идея аркылуу Файл -> Жаңы -> Проектке өтүңүз . Пайда болгон терезеде, Github боюнча долбоорго шилтемени киргизиңиз (эгер ар бир адам бир эле долбоорду өзүнчө түзүп, мени менен бардык кадамдардан өтсө, натыйжа жакшы болот): Клондоо"Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары - 3 баскычын чыкылдатыңыз жана долбоор клондолот .

pom.xml бардык нерсенин башчысы

Сизге керектүү нерселердин баары pom.xml ичинде. Долбоор, аны иштеп чыгуучу жана долбоор кайсы алыскы репозиторийде сакталганы тууралуу бардык маалыматтар. Башында бизди төмөнкү блоктор кызыктырат: <долбоор/> - бул долбоор жөнүндө бардык маалыматты камтыган негизги блок. Калгандарынын баары анда ачык же өтмө түрдө болот. Ачылыш тегинин ичинде мындай деп айтылат:
<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 - иштеп чыгуу уюмунун же жеке инженердин идентификатору. Бул, адатта, тескери тартипте домен болуп саналат. Мисал катары, Githubдагы romankh3 эсеби бул жерде сүрөттөлгөн. Бул өтө маанилүү. Жазгы экосистема үчүн бул 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>
Бул жерде мен тестирлөө үчүн эки китепкананы коштум: алар ар дайым керек. Сиз буга чейин байкагандай, көз карандылыктын Scope - чөйрөсү бар. Биздин учурда , тест көрсөтүлгөн , демек, биз бул көз карандылыкты негизги codeдон көрө албайбыз. Андан кийин, бардыгын кооз кылуу үчүн, <properties/> versionларын көрсөтүү үчүн өзүнчө тег колдонсоңуз болот :
<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 . Плагиндердин ар биринин орнотуулары, атрибуттары (параметрлери) бар, аларды орнотууга болот, ошону менен плагиндерди ыңгайлаштырууга болот. Бул келечекте биз үчүн кызыктуу болот. Азырынча эстеп, уланталы. Көз карандылыктар сыяктуу эле, биз плагин 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 жашоо циклинен башка милдеттер болушу мүмкүн. Бул эмне жөнүндө? Долбоорду чогулта турган буйруктардын жыйындысы бар ( куру ... дагы, албетте, англис тorнен калька, бирок ансыз эч жерде жок), Maven чогулткан курулуштарды жок кылып, Maven локалдууга орнотуп, сиз жасай аласыз. жергorктүү түрдө долбоорду көз карандылык катары көтөрүү ж.б.у.с. Эми бардыгы жөнүндө кененирээк сүйлөшөлү. Бул командалар тууралуу өз оюмду жазуудан мурун, мен алардын бул маселе боюнча Интернетте жазгандарын окууну чечтим... жана аны сүрөттөп берүү абдан кыйын экенин түшүндүм. Жумуш үчүн, баштапкы иш үчүн, бизге бир нече буйрук керек . Келгиле, аларды сүрөттөп көрөлү:
  • компиляция — долбоорду түзүү. Бул биринчи этап: анын жүрүшүндө долбоордо компиляция каталары бар-жогун көрө аласыз. Кээде IDEAда иштөөдө ар кандай секириктер болот, ошондуктан компиляция көйгөйлөрү жок жерде пайда болот. Ошентип, бул буйрук бардык i'лерди чекит кылат.
  • тест - JUnitте иштеген жана Maven күткөн жерде жайгашкан бардык тесттерди иштетет ( src/test/java сиздин капитаныңыз).
  • пакет – кийинки буйрук, ага мурунку эки команда кирет: б.а., компиляция буйругу адегенде анын ичинде ишке киргизилет, андан кийин тест командасы компиляцияланган долбоорго жөнөтүлөт жана бул жерде баары жакшы болсо, архивди түзүү башталат. (<пакеттен/> тандап алган архив))
  • орнотуу - биз Mavenди машинага орнотуп жатканда, биз долбоорлор үчүн жүктөп алган китепканаларды сактаган жергorктүү Git репозиторийибиз бар. Бирок Mavenдин кооздугу - биз орнотуу буйругун колдонуп , долбоорубузду жергorктүү Git репозиторийине кошуп, долбоорубузду жергorктүү көз карандылык катары колдоно алабыз. Мага ишенбейсизби? Байкап көрүңүз :) Ушундай жол менен сиз проектиңиздин башкага көз карандылыкка окшош экенин тез көрө аласыз.
  • жайылтуу — мурда келгендердин бардыгынын таажы. Долбоорду орнотуу катары жергorктүү репозиторийге гана эмес, ошондой эле алыскы репозиторийге кошуу мүмкүнчүлүгүн берген буйрук, ал жерден мүмкүнчүлүгү бар ар бир адам аны көз карандылык катары колдоно алат.
  • текшерүү - бардыгын текшерип, долбоор жайылтууга даярбы же жокпу айтып бере турган буйрук.
  • таза - албетте, компиляцияланган файлдар жана архив бир жерде сакталышы керек. Maven бул үчүн максаттуу папка бар . Бул долбоорго кереги жок маалыматтар. Ал эми долбоорду кайра чогултаардан мурун, мурункулардын баарын өчүрүп салсаңыз жакшы болмок. Бул үчүн таза буйрук .

Maven Plugins

Мен плагиндер жөнүндө көбүрөөк айткым келди, бирок макала буга чейин эле узун. Бул сиздин үй тапшырмаңыз болот. Бул эмне экенин жана аны кантип колдонууну түшүнүңүз. Макаланын уландысында биз Мавен менен иш жүзүндө күрөшөбүз.

Сериядагы бардык материалдардын тизмеси ушул макаланын башында.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION