JavaRush /Blog Jawa /Random-JV /Kabeh sing sampeyan pengin ngerti babagan Maven - "proyek...

Kabeh sing sampeyan pengin ngerti babagan Maven - "proyek Java saka A nganti Z"

Diterbitake ing grup
Halo kabeh, kanca-kanca sing ditresnani. Aku langsung njaluk ngapura: Aku kelingan yen aku janji bakal nulis artikel seminggu sepisan. Ora bisa metu. Aku mung durung bisa lungguh lan nulis kanthi bener, nanging aku ora pengin nindakake kanthi cara iki. Aku ora bakal whine bab alasan, awit aku ora perlu, lan sampeyan mesthi ora kasengsem. Proyèk iki ora mati, ana ing stasis :) We terus! Lan materi dina iki darmabakti kanggo Maven. "Proyek Jawa saka A nganti Z": Kabeh sing sampeyan pengin ngerti babagan Maven - 1

Ayo dadi pirembagan bab Maven

Pisanan sampeyan kudu nginstal. Mesthi, amarga aku duwe Mac, aku mung bisa nuduhake instalasi kanggo Mac. Iku mung nasib ala. Aku instal wis suwe, dadi sampeyan kudu nindakake dhewe :)
Pandhuan kanggo nginstal Maven ana ing materi iki .

Napa kita butuh Maven?

Maven minangka alat mbangun proyek, bebarengan karo Gradle lan Ant. Mung amarga aku bakal nggunakake ing JRTB (JavaRush Telegram Bot), aku pengin nggawa sampeyan anyar. Saiki, ora ana proyek siji-sijine sing digawe tanpa sistem perakitan, amarga nyederhanakake urip kita kaping pirang-pirang. Iki ngidini:
  • • narik kabeh perpustakaan sing dibutuhake (ing syarat-syarat alat kanggo perakitan - dependensi (yaiku, dependensi));
  • • nemtokake persis carane proyek kudu dirakit lan dadi apa (contone, apa kita pengin ngumpulake ing WAR utawa JAR utawa JAR eksekusi);
  • • nyetel versi proyek ing sak panggonan supaya dituduhake sak perakitan;
  • • njlèntrèhaké proyek lan siklus urip;
  • • nambah sing disebut plugins (versi tradisional saka tembung Inggris Plugin);
  • • nerbitake perpustakaan ing gudang sing dienggo bareng supaya proyek liyane bisa narik dheweke minangka dependensi.
Umumé, dheweke nindakake akeh perkara, lan kabeh migunani. Aku bakal ngomong iki: kanggo insinyur anyar ora perlu ngerti kabeh fungsi saka tutup nganti tutup. Ing kene, kaya git, penting kanggo ngerti dhasar lan konsep umum. Iki sing bakal kita lakoni. Kanggo kita, Maven diwiwiti kanthi file XML ing oyod proyek sing diarani pom.xml . Kita bakal nindakake kabeh kanthi praktik, mula kita bakal nggawe proyek pertama ing Komunitas JavaRush. Kanggo nindakake kabeh kanthi wicaksana, aku bakal nggunakake cithakan kanggo gudang , ing ngendi bab-bab dhasar sing dakgambarake ing JR wis dikonfigurasi . Kanggo nggawe, pindhah menyang repositori kanthi cithakan banjur klik tombol Gunakake template iki : "Proyek Jawa saka A nganti Z": Kabeh sing sampeyan pengin ngerti babagan Maven - 2Akibaté, kita duwe gudang pisanan ing komunitas kita :) Kita ngundhuh proyek kasebut sacara lokal. Kanggo nindakake iki, liwat idea, pindhah menyang File -> New -> Project from Version Control . Ing jendhela sing katon, ketik link menyang proyek ing Github (asil bakal luwih apik yen saben wong nggawe proyek sing padha kanthi kapisah lan ngliwati kabeh langkah karo aku): "Proyek Jawa saka A nganti Z": Kabeh sing sampeyan pengin ngerti babagan Maven - 3Klik Klone , lan proyek kasebut dikloning .

pom.xml minangka kepala kabeh

Kabeh sing perlu ana ing pom.xml. Kabeh informasi babagan proyek, pangembang lan ing repositori remot proyek kasebut disimpen. Ing wiwitan, kita kasengsem ing blok ing ngisor iki: <project/> - iki minangka blok utama, sing ngemot kabeh informasi babagan proyek kasebut. Kabeh liyane bakal eksplisit utawa transitively ing. Ing njero tag pambuka kasebut ujar kaya mangkene:
<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">
Lan ing ndhuwur kabeh liya, baris sabanjure uga ditulis ing kabeh pomniks (slang mesthine saka pom.xml :)).
<modelVersion>4.0.0</modelVersion>
Nanging banjur dadi luwih menarik: kita bakal njlèntrèhaké carane kita ngenali project sing kita memorial describes. Nggunakake perpustakaan minangka conto, aku bakal njlèntrèhaké, banjur kita bakal nambah menyang memori kita, kanggo proyek sing mentas digawe:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
Sing utama ing kene:
  • groupId minangka pengenal organisasi pangembangan utawa insinyur individu. Iki biasane domain ing urutan mbalikke. Minangka conto, akun romankh3 ing Github diterangake ing kene. Iku penting banget. Sebutake kanggo ekosistem Spring yaiku com.springframework . Kanthi cara iki sampeyan bisa mbedakake proyek asli saka garpu wong liya utawa mung kanthi kebetulan jeneng proyek kasebut.
  • artifaceId wis jeneng project tartamtu sing diterangake ing memori iki.
  • versi —versi proyek iki. Kabeh ing kene wis jelas: nambah fungsi anyar, sing lawas tetep, refactored utawa nggawe sawetara owah-owahan liyane - nambah versi.
  • packaging - kene kita njlèntrèhaké carane Maven kudu ngumpul project kita. Salah siji ing Jar, utawa ing Perang, utawa sawetara liyane .
  • jeneng - punika jeneng luwih nyenengake kanggo project.
Isih ana sawetara perkara sing ora kudu diisi - Maven bakal bisa digunakake tanpa - nanging yen sampeyan kudu nerbitake perpustakaan kanggo panggunaan umum, mesthine kudu ditambahake. Apa iki?
  • • path kanggo repositori project, saka ngendi iku bisa diundhuh

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

  • • lisensi ing kang project iki mbagekke. Kajaba iku, bisa uga ana luwih saka siji, mula sampeyan kudu nyetel kanthi cara iki:

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

  • • informasi babagan pangembang sing nggawe/nggawe proyek:

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

  • • blok scm, sing nerangake carane proyek bisa diakses:

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

Sawise nerangake informasi umum, kita bisa nambah blok kanthi dependensi:
<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>
Ing kene aku nambahake rong perpustakaan kanggo dites: mesthi dibutuhake. Kaya sing wis sampeyan ngerteni, dependensi duwe Scope - scope. Ing kasus kita , tes kasebut ditemtokake , tegese kita ora bakal bisa ndeleng ketergantungan iki ing kode utama. Sabanjure, supaya kabeh katon apik, sampeyan bisa nggunakake tag sing kapisah kanggo nampilake versi <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>
Dadi blok dependensi bisa dianyari nggunakake konstruksi ${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>
Sabanjure ana blok <build/> gedhe , sing ngemot blok <plugins/> sing penting , sing sampeyan bisa ngatur proses mbangun. Sampeyan bisa nambah siji utawa luwih plugin ing blok <plugins/> , kaya iki:
<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>
Ing kene sampeyan bisa ndeleng manawa aku wis nambahake rong plugin - maven-source-plugin lan maven-javadoc-plugin . Saben plugin duwe setelan, atribut (parameter) sing bisa disetel, saengga bisa ngatur plugin kasebut. Iki bakal menarik kanggo kita ing mangsa ngarep. Kanggo saiki, ayo eling lan nerusake. Kanthi cara sing padha kanggo dependensi, kita bakal nyelehake versi plugin ing <properties/> . Adhedhasar iki, sampeyan bisa nggawe memori ing ngisor iki:
<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 siklus urip

Maven duwe siklus urip maven. Iku worth ngomong sing iki pesawat saka tugas sing maven bisa nindakake. Bisa uga ana tugas liyane kajaba siklus urip maven. Perkara apa iku? Ana sakumpulan prentah sing bisa sampeyan ngumpulake proyek ( bangun ... maneh, mesthi, kertas tracing saka basa Inggris, nanging tanpa iki ora ana), mbusak bangunan sing diklumpukake Maven, instal ing Maven lokal supaya sampeyan bisa lokal narik munggah project minangka ketergantungan, lan ing. Saiki ayo ngomong babagan kabeh kanthi luwih rinci. Sadurunge nulis pendapatku babagan tim kasebut, aku mutusake maca apa sing ditulis ing Internet babagan perkara iki ... lan nyadari yen angel banget kanggo nggambarake. Kanggo karya, kanggo karya wiwitan, kita butuh sawetara printah . Ayo digambarake:
  • kompilasi — kompilasi proyek. Iki minangka tahap pertama: sajrone sampeyan bisa ndeleng manawa ana kesalahan kompilasi ing proyek kasebut. Kadhangkala ana macem-macem leapfrogs karo makarya ing IDEA, pramila masalah kompilasi katon ing ngendi ora ana. Dadi printah iki bakal dot kabeh i.
  • test - mbukak kabeh tes sing mbukak ing JUnit lan dumunung ing ngendi Maven ngarepake ( src / test / java kapten Panjenengan).
  • paket minangka perintah sabanjure, sing kalebu loro sadurunge: yaiku, printah kompilasi pisanan diluncurake ing njero, banjur printah tes dikirim menyang proyek sing dikompilasi , lan yen kabeh ok ing kene, nggawe arsip diwiwiti (arsip sing kita pilih ing <packaging/>))
  • nginstal - nalika kita nginstal Maven ing mesin, kita duwe panyimpenan Git lokal sing nyimpen perpustakaan sing diundhuh kanggo proyek. Nanging kaendahan Maven yaiku kita bisa nggunakake printah instal kanggo nambah proyek kita menyang repositori Git lokal lan nggunakake proyek kita sacara lokal minangka dependensi. Ora percoyo aku? Coba :) Kanthi cara iki sampeyan bisa kanthi cepet ndeleng kepiye proyek sampeyan bakal katon kaya ketergantungan liyane.
  • nyebarake iku makutha kabeh sing teka sadurunge. Prentah sing menehi kemampuan kanggo nambah proyek ora mung menyang repositori lokal minangka nginstal, nanging uga menyang remot, saka ngendi saben wong sing duwe akses bisa nggunakake minangka ketergantungan.
  • verifikasi - printah sing bakal mriksa kabeh lan ngomong apa project siap kanggo penyebaran prajurit.
  • resik - mesthi, file kompilasi lan arsip kudu disimpen nang endi wae. Maven duwe folder target kanggo iki . Iki minangka data sing ora dibutuhake proyek kasebut. Lan sadurunge ngumpulake proyek kasebut, luwih becik mbusak kabeh sing sadurunge. Iki apa printah resik kanggo .

Maven Plugins

Aku pengin ngomong luwih akeh babagan plugin, nanging artikel kasebut wis dawa. Iki bakal dadi PR sampeyan. Ngerti apa iku lan carane nggunakake. Ing lanjutan saka artikel, kita bakal menehi hasil karo Maven ing laku.

Dhaptar kabeh materi ing seri kasebut ana ing wiwitan artikel iki.

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