JavaRush /Java блогы /Random-KK /Maven туралы білгіңіз келгеннің бәрі - «А-дан Я-ға дейінг...
Roman Beekeeper
Деңгей

Maven туралы білгіңіз келгеннің бәрі - «А-дан Я-ға дейінгі Java жобасы».

Топта жарияланған
Баршаңызға сәлем, қымбатты достар. Бірден кешірім сұрағым келеді: аптасына бір рет мақала жазамын деп уәде бергенім есімде. Болмады. Мен жай ғана отыруға және дұрыс жазуға үлгермедім, бірақ мен оны былай немесе былай істегім келмейді. Себептер туралы ренжімеймін, өйткені бұл маған қажет емес және сізді қызықтырмайды. Жоба өлген жоқ, тоқырауда болды :) Жалғастырамыз! Ал бүгінгі материал Мавенге арналған. «А-дан Я-ға Java жобасы»: Maven туралы білгіңіз келгеннің бәрі - 1

Мавен туралы сөйлесейік

Алдымен оны орнату керек. Әрине, менде Mac болғандықтан, мен тек Mac үшін орнатуды көрсете аламын. Бұл жай ғана сәтсіздік. Мен оны ұзақ уақыт бұрын орнатқанмын, сондықтан оны өзіңіз жасауыңыз керек :)
Maven орнату нұсқаулары осы материалда .

Мавен бізге не үшін қажет?

Maven - бұл Gradle және Ant-пен бірге жобаны құру құралы. Мен оны JRTB-де (JavaRush Telegram Bot) пайдаланатындықтан, мен сізді жаңартып бергім келеді. Қазіргі уақытта құрастыру жүйесі жоқ бірде-бір жоба жасалмайды, өйткені ол біздің өмірімізді бірнеше есе жеңілдетеді. Бұл мүмкіндік береді:
  • • барлық қажетті кітапханаларды тартыңыз (жинақтауға арналған құралдар бойынша – тәуелділіктер (яғни, тәуелділік));
  • • жобаның нақты қалай және нені құрастыру керектігін анықтау (мысалы, WAR немесе JAR немесе орындалатын JAR-да құрастырғымыз келе ме);
  • • жоба нұсқасын құрастыру кезінде көрсетілетіндей етіп бір жерге орнату;
  • • жобаны және оның өмірлік циклін сипаттау;
  • • плагиндер деп аталатындарды қосу (ағылшын тіліндегі Plugin сөзінің дәстүрлі нұсқасы);
  • • басқа жобалар оларды тәуелділік ретінде тартуы үшін кітапханаларды ортақ репозиторийде жариялау.
Жалпы, ол көп нәрсені жасайды және олардың барлығы пайдалы. Мен мұны айтайын: жаңадан бастаған инженерлер үшін барлық функционалдылықты басынан аяғына дейін білу қажет емес. Мұнда, git сияқты, негізгі және жалпы түсініктерді түсіну маңызды. Бұл біз жасаймыз. Біз үшін Maven pom.xml деп аталатын жобамыздың түбіріндегі XML файлынан басталады . Біз барлығын іс жүзінде жасаймыз, сондықтан алдымен JavaRush қауымдастығында бірінші жобамызды жасаймыз. Барлығын ақылмен жасау үшін мен JR-де бір рет сипаттаған негізгі нәрселер конфигурацияланған репозиторий үлгісін қолданамын . Жасау үшін үлгімен репозиторийге өтіп, Осы үлгіні пайдалану түймешігін басыңыз : Нәтижесінде біздің қауымдастықта бірінші репозиторий бар :) Біз жобаны жергілікті түрде жүктейміз. Мұны істеу үшін идея арқылы Файл -> Жаңа -> Нұсқаны басқарудан жобаға өтіңіз . Пайда болған терезеде Github-тағы жобаға сілтемені енгізіңіз (әркім бірдей жобаны бөлек жасап, менімен бірге барлық қадамдарды орындаса нәтиже жақсы болады): Клондау түймесін басыңыз , жоба клондалады .«А-дан Я-ға дейінгі Java жобасы»: Maven туралы білгіңіз келгеннің бәрі - 2«А-дан Я-ға Java жобасы»: 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 – әзірлеуші ​​ұйымның немесе жеке инженердің идентификаторы. Бұл әдетте кері тәртіптегі домен. Мысал ретінде, 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>
Мұнда мен тестілеу үшін екі кітапхана қостым: олар әрқашан қажет. Байқағаныңыздай, тәуелділіктердің Scope - ауқымы бар. Біздің жағдайда тест көрсетілген , яғни біз бұл тәуелділікті негізгі codeта көрмейміз. Әрі қарай, барлығы әдемі көрінуі үшін, <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>
Содан кейін құрастыру процесін теңшеуге болатын маңызды <plugins/> блогы бар үлкен <build/ > блогы келеді. <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 local так, чтобы можно было локально подтягивать себе проект How зависимость, тағыда басқа. Енді барлығы туралы толығырақ сөйлесейік. Бұл командалар туралы өз пікірімді жазбас бұрын, мен олардың бұл мәселе туралы Интернетте жазғандарын оқуды жөн көрдім ... және сипаттау өте қиын екенін түсіндім. Жұмыс үшін, бастапқы жұмыс үшін бізге бірнеше командалар қажет . Оларды сипаттайық:
  • compile — жобаны құрастыру. Бұл бірінші кезең: оның барысында жобада компиляция қателерінің бар-жоғын көруге болады. Кейде IDEA-да жұмыс істеу кезінде әртүрлі секірулер болады, сондықтан компиляция проблемалары болмауы керек жерде пайда болады. Сондықтан бұл пәрмен барлық i-ге нүкте қояды.
  • test – JUnit жүйесінде жұмыс істейтін және Maven күткен жерде орналасқан барлық сынақтарды іске қосады ( src/test/java – сіздің капитаныңыз).
  • бума – келесі пәрмен, оған алдыңғы екі команда кіреді: яғни компиляция командасы алдымен оның ішінде іске қосылады, содан кейін тест командасы құрастырылған жобаға жіберіледі және мұнда бәрі дұрыс болса, мұрағатты құру басталады. (< қаптамада/> біз таңдайтын мұрағат))
  • орнату - машинада Maven орнатқанда, бізде жобалар үшін жүктеп алатын кітапханаларды сақтайтын жергілікті Git репозиторийі бар. Бірақ Maven сұлулығы мынада: орнату пәрменін пайдаланып жобамызды жергілікті Git репозиторийіне қосып, жобамызды жергілікті жерде тәуелділік ретінде пайдалана аламыз. Маған сенбейсіз бе? Байқап көріңіз :) Осылайша сіз жобаңыздың басқасына тәуелділік ретінде қалай көрінетінін жылдам көре аласыз.
  • deploy — бұрын келгеннің бәрінің тәжі. Жобаны орнату ретінде жергілікті репозиторийге ғана емес, сонымен қатар қашықтағы репозиторийге қосу мүмкіндігін беретін пәрмен, ол жерден рұқсаты бар кез келген адам оны тәуелділік ретінде пайдалана алады.
  • тексеру – барлығын тексеретін және жобаның орналастыруға дайын екенін көрсететін пәрмен.
  • таза – әрине, құрастырылған файлдар мен мұрағат бір жерде сақталуы керек. Мавенде бұл үшін мақсатты қалта бар . Бұл жобаға қажет емес деректер. Және жобаны қайта құрастырмас бұрын, бұрын келгеннің бәрін жойған дұрыс. Таза пәрмені осыған арналған .

Maven плагиндері

Мен плагиндер туралы көбірек айтқым келді, бірақ мақала қазірдің өзінде ұзақ. Бұл сіздің үй тапсырмасы болады. Оның не екенін және оны қалай пайдалану керектігін түсініңіз. Мақаланың жалғасында біз Мавенмен іс жүзінде айналысамыз.

Сериядағы барлық материалдардың тізімі осы мақаланың басында.

Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION