JavaRush /Java Blog /Random-TK /Maven hakda bilmek isleýän zatlaryňyzyň hemmesi - "A-dan ...

Maven hakda bilmek isleýän zatlaryňyzyň hemmesi - "A-dan Z-a çenli Java taslamasy"

Toparda çap edildi
Hemmelere salam, gadyrly dostlar. Derrew ötünç soramak isleýärin: Hepdede bir gezek makala ýazjakdygyma söz berenim ýadymda. Netije bermedi Diňe oturmaga we dogry ýazmaga öwrenişmedim, ýöne muny beýle ýa-da beýle etmek islämok. Sebäpleri hakda gürleşip bilmerin, sebäbi maňa gerek däl, elbetde gyzyklanmaýarsyňyz. Taslama ölmedi, stazda boldy :) Dowam edýäris! Şu günki material bolsa Mawene bagyşlanýar. "A-dan Z-a çenli Java taslamasy": Maven hakda bilmek isleýän zatlaryňyzyň hemmesi - 1

Maven hakda gürleşeliň

Ilki bilen ony gurmaly. Elbetde, “Mac” barlygy sebäpli, diňe “Mac” üçin gurnamany görkezip bilerin. Bu diňe şowsuzlyk. Köp wagt öň gurupdym, şonuň üçin özüňiz etmeli bolarsyňyz :)
Maveni gurmak boýunça görkezmeler şu materialda .

Maven näme üçin gerek?

Maven Gradle we Ant bilen bilelikde taslama gurmak guralydyr. Diňe JRTB-de (JavaRush Telegram Bot) ulanjakdygym sebäpli, sizi täzeläp durmak isleýärin. Häzirki wagtda gurnama ulgamy bolmazdan ýekeje taslama hem döredilmeýär, sebäbi durmuşymyzy birnäçe gezek aňsatlaşdyrýar. Bu mümkinçilik berýär:
  • • ähli zerur kitaphanalary çekiň (ýygnamak gurallary nukdaýnazaryndan - garaşlylyk (ýagny garaşlylyk));
  • • taslamanyň näderejede düzülmelidigini we nämä degişlidigini kesgitlemek (mysal üçin, WAR ýa-da JAR ýa-da ýerine ýetirip boljak JAR-da gurmak isleýäris);
  • • gurnama wagtynda görkezilmegi üçin taslama wersiýasyny bir ýerde goýuň;
  • • taslamany we onuň ýaşaýyş siklini suratlandyrmak;
  • • plugin diýilýän zady goşuň (iňlis dilindäki Plugin sözüniň adaty wersiýasy);
  • • beýleki taslamalar garaşlylyk hökmünde çekip biler ýaly kitaphanalary umumy ammarda çap ediň.
Umuman, köp zatlar edýär we hemmesi peýdaly. Muny aýdaryn: täze inersenerler üçin gapakdan başlap ähli funksiýalary bilmek hökman däl. Bu ýerde git ýaly bolşy ýaly, esaslara we umumy düşünjelere düşünmek möhümdir. Bu ederis. Maven biziň üçin pom.xml atly taslamamyzyň kökünde XML faýly bilen başlaýar . Iş ýüzünde hemme zady ederis, şonuň üçin ilki bilen JavaRush jemgyýetinde ilkinji taslamamyzy dörederis. Hemme zady paýhasly ýerine ýetirmek üçin ammar üçin bir şablon ulanaryn , bu ýerde JR-de bir gezek suratlandyran esasy zatlarym eýýäm düzülen . Döretmek üçin, şablon bilen ammara gidiň we bu şablony ulanmak düwmesine basyň : "A-dan Z-a çenli Java taslamasy": Maven hakda bilmek isleýän zatlaryňyzyň hemmesi - 2Netijede jemgyýetimizde ilkinji ammarymyz bar :) Taslamany ýerli derejede göçürip alýarys. Munuň üçin ideýa arkaly Faýl -> Täze -> Wersiýa Dolandyryşyndan Taslama gidiň . Peýda bolan penjirede Github-daky taslama baglanyşyk giriziň (her kim şol bir taslamany aýratyn döredip, meniň bilen ähli ädimleri geçse has gowy bolar): Klon"A-dan Z-a çenli Java taslamasy": Maven hakda bilmek isleýän zatlaryňyzyň hemmesi - 3 basyň we taslama klonlaşdyryldy .

pom.xml hemme zadyň başy

Size zerur zatlaryň hemmesi pom.xml-de. Taslama, ony dörediji we taslamanyň uzakdaky ammarynda saklanýan ähli maglumatlar. Başda aşakdaky bloklar bilen gyzyklanýarys: <project /> - bu taslama barada ähli maglumatlary öz içine alýan esasy blok. Beýlekileriň hemmesi aç-açan ýa-da geçişli bolar. Açylyş belliginiň içinde şuňa meňzeş bir zat bar:
<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">
Elsehli zadyň üstünde indiki setir hem ähli pomniklerde ýazylýar (slang pom.xml-den bolmalydyr).
<modelVersion>4.0.0</modelVersion>
Thenöne soň has gyzykly bolýar: ýadygärligimiziň beýan edýän taslamasyny nädip kesgitleýändigimizi düşündireris. Kitaphanamy mysal hökmünde ulanyp, suratlandyraryn, soň bolsa ýadymyza, täze döredilen taslama goşarys:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
Bu ýerde esasy zat:
  • groupId ösüş guramasynyň ýa-da aýratyn inereneriň kesgitleýjisidir. Bu, adatça ters tertipdäki domen. Mysal üçin, Github-daky romankh3 hasaby bu ýerde beýan edilýär. Bu örän möhümdir. Bahar ekosistemasy üçin com.springframework diýeliň . Şeýlelik bilen, asyl taslamany başga biriniň vilkasyndan ýa-da taslama adynyň gabat gelmegi bilen tapawutlandyryp bilersiňiz.
  • artifaceId eýýäm bu ýatda beýan edilen belli bir taslamanyň adydyr.
  • wersiýasy - bu taslamanyň wersiýasy. Bu ýerdäki hemme zat gün ýaly düşnükli: täze funksiýa goşuldy, köne köne, täzeden işledildi ýa-da başga üýtgeşmeler girizildi - wersiýany köpeltdi.
  • gaplamak - bu ýerde Maveniň taslamamyzy nädip ýygnamalydygyny düşündirýäris. Jara-da, Uruşda-da, ýa-da beýlekilerde .
  • ady - bu ýerde taslama üçin has ýakymly at bar.
Entek doldurylmaly däl käbir zatlar bar - Maven olarsyz işlär - ýöne kitaphanany köpçülige ulanmak üçin neşir etmeli bolsaňyz, hökman goşmaly. Bu zatlar näme?
  • • göçürip alyp bolýan taslamanyň ammaryna barýan ýol

    <url>https://romankh3.github.io/image-comparison/</url>

  • • bu taslama paýlanýan ygtyýarnama. Mundan başga-da, birden köp bolup biler we şonuň üçin muny şeýle kesgitlemeli:

    <licenses>
     <license>
       <name>The Apache Software License, Version 2.0</name>
       <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
     </license>
    </licenses>

  • • taslamany döreden / döredýän döredijiler hakda maglumat:

    <developers>
     <developer>
       <id>romankh3</id>
       <name>Roman Beskrovnyi</name>
       <email>roman.beskrovnyy@gmail.com</email>
     </developer>
    </developers>

  • • taslama nädip girip boljakdygyny düşündirýän scm blok:

    <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>

Umumy maglumatlary düşündirenimizden soň, garaşlylyk bilen blok goşup bileris:
<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>
Synag üçin iki kitaphanany goşdum: olar hemişe zerur. Öňem belläp geçişiňiz ýaly, garaşlylygyň çäkleri bar. Biziň ýagdaýymyzda synag kesgitlenýär , bu esasy kodda bu garaşlylygy görmeris. Ondan soň, hemme zady owadan etmek üçin, <häsiýetler /> wersiýalaryny görkezmek üçin aýratyn bellik ulanyp bilersiňiz :
<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>
Şeýlelik bilen garaşlylyk blokyny $ {PROPERTY_NAME} konstruksiýasy arkaly täzeläp bolýar :
<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>
Ondan soň gurmak prosesini sazlap boljak möhüm <plugins /> blok bar bolan uly <build /> blok gelýär. Munuň ýaly <plugins /> blokyň içine bir ýa-da birnäçe plugin goşup bilersiňiz:
<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>
Bu ýerde iki sany plugin goşandygymy görüp bilersiňiz - maven-source-plugin we maven-javadoc-plugin . Plaginleriň hersinde sazlap boljak sazlamalar, atributlar (parametrler) bar, şeýlelik bilen pluginleri özleşdirýär. Bu geljekde biziň üçin gyzykly bolar. Häzirlikçe ýatda saklalyň we dowam edeliň. Baglylyklar ýaly, plugin wersiýalaryny <häsiýetler /> -e ýerleşdireris . Şundan ugur alyp, aşakdaky ýady döredip bilersiňiz:
<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 ömri

Maveniň maven ömri sikli ýaly bir zady bar. Munuň bir ussanyň ýerine ýetirip biljek meseleleriniň toplumydygyny aýtmak gerek. Maven ömründen başga meseleler bolup biler. Bu näme? Taslamany ýygnap boljak buýruklar toplumy bar ( gurmak ... ýene-de, elbetde, iňlis dilinden gözleg kagyzy, ýöne bu ýer ýok), Maveniň ýygnan binalaryny pozuň, Maveniň ýerli ýerinde guruň. garaşlylyk hökmünde taslamany ýerli derejede çekiň we ş.m. Indi hemme zat barada has jikme-jik gürleşeliň. Bu toparlar hakda öz pikirimi ýazmazdan ozal, bu mesele barada internetde ýazýanlaryny okamagy makul bildim ... we düşündirmegiň kyndygyna düşündim. Iş üçin, başlangyç iş üçin birnäçe buýruk gerek . Olary suratlandyralyň:
  • düzmek - taslamany düzmek. Bu birinji etap: taslamanyň dowamynda düzüliş ýalňyşlyklarynyň bardygyny ýa-da ýokdugyny görüp bilersiňiz. Käwagt IDEA-da işlemek bilen dürli bökdençlikler bolýar, şonuň üçin ýygnamak problemalary ýok ýerinde ýüze çykýar. Şeýlelik bilen bu buýruk i-leriň hemmesine nokat goýar.
  • synag - JUnit-de işleýän we Maveniň garaşýan ýerinde ýerleşýän ähli synaglary işledýär ( src / test / java siziň kapitanyňyzdyr).
  • paket indiki iki buýrugy öz içine alýan indiki buýrukdyr: ýagny, ilki bilen kompile buýrugy işe girizilýär, soňra synag buýrugy düzülen taslama iberilýär we bu ýerde hemme zat gowy bolsa, arhiw döredilýär. (<gaplamak /> -da saýlaýan arhiwimiz)
  • gurmak - Maveni bir enjama guranymyzda, taslamalar üçin göçürip alýan kitaphanalarymyzy saklaýan ýerli Git ammarymyz bar. Emma Maveniň gözelligi , taslamamyzy ýerli Git ammaryna goşmak we taslamamyzy garaşlylyk hökmünde ýerli derejede ulanmak üçin gurnama buýrugyny ulanyp bileris . Maňa ynanmaýarsyňmy? Synap görüň :) Şeýlelik bilen, taslamaňyzyň başga birine garaşly boljakdygyny çalt görüp bilersiňiz.
  • ýerleşdirmek , öň gelen zatlaryň täjidir. Taslama diňe bir gurnama hökmünde ýerli ammarlara däl-de, eýsem elýeterli her bir adam garaşlylyk hökmünde ulanyp boljak uzakdaky bir taslama goşmak mümkinçiligini berýän buýruk.
  • barlamak - hemme zady barlaýan we taslamanyň ýerleşdirilmegine taýyndygyny görkezýän buýruk.
  • arassalamak - elbetde, düzülen faýllar we arhiw bir ýerde saklanmalydyr. Maveniň munuň üçin maksatly bukjasy bar . Bu, taslama zerur däl maglumatlar. Taslamany täzeden gurmazdan ozal gelen zatlaryň hemmesini pozsaň gowy bolardy. Arassa buýruk şu .

Maven pluginleri

Plaginler hakda has köp gürleşmek isledim, ýöne makala eýýäm uzyn. Bu siziň öý işiňiz bolar. Onuň nämedigine we nädip ulanmalydygyna düşüniň. Makalanyň dowamy bilen, Maven bilen iş ýüzünde işleşeris.

Tapgyryň ähli materiallarynyň sanawy bu makalanyň başynda.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION