Programmēšana

Kas ir Maven? Java veidošanas un atkarības pārvaldība

Apache Maven ir Java izstrādes stūrakmens un Java lietošanai visbiežāk izmantotais būvniecības pārvaldības rīks. Maven racionalizētais, uz XML balstītais konfigurācijas modelis ļauj izstrādātājiem ātri aprakstīt vai aptvert jebkura Java balstīta projekta aprises, kas padara jaunu projektu sākšanu un koplietošanu ātru. Maven atbalsta arī testētu attīstību, ilgtermiņa projekta uzturēšanu, un tā deklaratīvā konfigurācija un plašais spraudņu klāsts padara to par populāru CI / CD iespēju. Šis raksts ir īss ievads Maven, ieskaitot Maven POM un direktoriju struktūru, un komandas sava pirmā Maven projekta izveidei.

Ņemiet vērā, ka jaunākais Maven izlaidums šajā rakstā ir Maven 3.6.3.

Maven vs Ant un Gradle

Maven nav vienīgais Java ekosistēmas veidošanas rīks, lai gan tas ir vispopulārākais. Ant, kas ir agrākas paaudzes XML bāzes konfigurācijas rīks, trūkst Maven standartizētas, uz konvencijām balstītas prakses un atkarības pārvaldības, taču tā piedāvā elastību, ko nevarat atrast ar Maven. Gradle ir jaunāks rīks, kas darbojas virs Maven ekosistēmas (izmantojot Maven repozitorijus), bet atbalsta konfigurēšanai Groovy vai Kotlin bāzes DSL izmantošanu. Visi trīs ir labi veidošanas rīki paši par sevi, un katru no tiem var integrēt CI / CD procesā. Svarīgi ir izvēlēties piemērotāko savām vajadzībām un zināt, kā to pareizi izmantot.

Kā darbojas Maven

Tāpat kā daudzi lieliski rīki, arī Maven ņem to, kas kādreiz bija pārāk sarežģīts (konfigurācijas elle), un vienkāršo to līdz sagremojamām daļām. Maven sastāv no trim sastāvdaļām:

  • POM: fails, kas apraksta Maven projektu un tā atkarības.
  • Direktorijs: Standartizēts formāts Maven projekta aprakstam POM.
  • Krātuves: kur tiek glabāta un atklāta trešo pušu programmatūra.

The Maven POM: Katram Java projektam, kas izmanto Maven, saknes direktorijā ir POM (projekta objekta modelis) fails. The pom.xml apraksta projekta atkarības un stāsta, kā to veidot. (Atkarības ir trešās puses programmatūra, kas nepieciešama projektam. Daži izplatīti piemēri ir JUnit un JDBC. Visu pieejamo rīku un populāro atkarību sarakstu skatiet Mavenas centrālajā repozitorijā.)

Maven direktorijs: Maven katalogs ievieš to, kas pazīstams kā konvencija par konfigurāciju, elegants konfigurācijas elles risinājums. Tā vietā, lai prasītu izstrādātājiem definēt izkārtojumu un manuāli konfigurēt komponentus katram jaunam projektam (kā tas bija gadījumā ar makefile un Ant), Maven izveido kopēju projekta struktūru un piedāvā standarta faila formātu, lai aprakstītu tā darbību. Jūs vienkārši pievienojat savas prasības, un Maven izsauc atkarības un konfigurē projektu jums.

Centralizētas krātuves: Visbeidzot, Maven izmanto centralizētus krātuves, lai atklātu un publicētu projektu paketes kā atkarības. Kad projektā norādīsit atkarību, Maven to atradīs centralizētajā repozitorijā, lejupielādēs vietējā repozitorijā un instalēs jūsu projektā. Lielākoties tas viss jums kā izstrādātājam nav redzams.

Piekļuve Maven atkarībām

Pēc noklusējuma Maven atrisina atkarības no Mavenas centrālā repozitorija. Bieža alternatīva ir JCenter, kuram ir plašāks pieejamo paku kopums. Organizācijas arī publicē un uztur iekšējos krātuves, kas var būt publiskas vai privātas. Lai piekļūtu krātuvei, Maven POM norādiet tā URL vai varat uzdot Mavenam meklēt citus krātuves.

Maven instalēšana

Maven ir Java projekts, tāpēc pirms tā instalēšanas jūsu izstrādes vidē ir jābūt instalētam JDK. (Lai uzzinātu vairāk par JDK lejupielādi un instalēšanu, skatiet sadaļu "Kas ir JDK? Ievads Java izstrādes komplektā".)

Kad esat izveidojis Java izstrādes vides iestatīšanu, varat instalēt Maven tikai dažos soļos:

  1. Lejupielādējiet jaunāko Maven izlaidumu (Maven 3.6.3 no šī raksta).
  2. Izraksts apache.maven .zip fails ērtā vietā.
  3. Novietojiet šo failu uz sava ceļa. Piemēram, Unix vai Linux sistēmā: eksportēt PATH = $ PATH: / home / maven /.

Tagad jums vajadzētu būt piekļuvei mvn komandu. Tips mvn -v lai pārliecinātos, ka esat veiksmīgi instalējis Maven.

The Maven POM

Katra Maven projekta sakne ir pom.xml failu. Neskatoties uz reputāciju, ka tā ir garlaicīga, XML šajā lietā faktiski darbojas diezgan labi. Mavenas POM ir viegli lasāms un atklāj daudz kas notiek projektā. (Ja esat strādājis ar JavaScript, pom.xml pēc mērķa ir līdzīgs Node NPM pakete.json failu.)

1. saraksts parāda ļoti vienkāršu Mavenu pom.xml.

Saraksts 1. Vienkāršais Maven POM

   4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar junit junit 4.12 test 

Izpratne par Maven POM

Kad esat to sajutis, POM nav noslēpumains. Lai sāktu, varat pārlūkot XML preambulu, kas tikai atsaucas uz oficiālo POM shēmu. Ievērojiet XML, kas sākas ar modelVersiontomēr. Tas Mavenam norāda, kādu POM versiju izmantot, šajā gadījumā Maven POM 4.0.0.

Tālāk jums ir groupId, artefactId, un versija. Šie trīs atribūti kopā unikāli identificē katru repozitorijā esošo Maven pārvaldīto resursu. Šie faila augšdaļā esošie atribūti raksturo jūsu Maven projektu.

Tagad ieskatieties atkarības sadaļā POM, kur mēs aprakstām projekta atkarības. Šajā gadījumā mēs līdz šim esam piesaistījuši tikai vienu atkarību - JUnit. Ievērojiet, ka JUnit ir aprakstīts arī tā ziņā groupId, artefactId, un versija.

Neatkarīgi no tā, vai aprakstāt pats savu projektu vai atkarību no projekta, šīs vērtības Mavenam konsekventi norāda, kur atrast projektu Maven repozitorijā un kura versija ir pieejama lietošanai.

Jūsu projekta mitināšana Maven repozitorijā

Paturiet prātā, ka POM nosaka visu, kas jūsu projektam nepieciešams, lai palaistu, taču tas arī raksturo jūsu projektu kā potenciālo atkarību. Ja veidojat projektu, kas būs atkarīgs - teiksim, izveidojot bibliotēku citiem projektiem, kurus izmantot -, tas būs jāpadara pieejams vienā no četriem veidiem:

  1. Padariet to pieejamu lokāli.
  2. Publicēt privāti pārvaldītā attālā krātuvē.
  3. Publicēt privātā mākoņa krātuvē.
  4. Publicējiet publiskā repozitorijā, piemēram, Maven Central.

Pirmajā gadījumā jūs vispār neizmantojat attālo krātuvi. Tā vietā citi izstrādātāji lokāli lejupielādēs un instalēs jūsu projektu savā Maven repo, izmantojot mvn instalēt komandu.

Otrajā gadījumā jūs izmantojat mitinātu Maven repozitoriju, izmantojot privāti kontrolētu serveri, lai publicētu un lejupielādētu atkarības. Šim nolūkam jums ir nepieciešams krātuves pārvaldnieks, piemēram, Apache Archiva.

Jaunāka alternatīva ir izmantot privātu attālo repo, taču, lai to pārvaldītu, paļaujieties uz mākonī balstītu pakalpojumu, piemēram, Cloudsmith. Tas dod priekšrocības attālināti mitinātām atkarībām, nepiepildot repo serveri. Šis pakalpojums, protams, ir par maksu.

Visbeidzot, neliela daļa projektu nonāks Central Maven repozitorijā vai JCenter, kas paredzēti plaši izmantotām, publiskām paketēm. Ja veidojat atvērtā pirmkoda atkarību, ko izmanto citi, jums būs nepieciešama viena no šīm centralizētajām krātuvēm, lai jūsu darbs būtu pieejams pasaulei.

  • Uzziniet vairāk par projekta mitināšanu Maven repozitorijā un iegūstiet pieejamo krātuvju sarakstu.
  • Skatiet oficiālo Maven dokumentāciju par Maven Release spraudni, ko izmanto, lai sagatavotu un pārvaldītu programmatūru, kas publicēta Maven repozitorijā.

Izveidojiet Maven paketi

Ja izveidojat pom.xml no 1. saraksta un ievietojiet to direktorijā, pret to varēsiet palaist Maven komandas. Mavenam ir daudz komandu, un, izmantojot spraudni, ir pieejamas citas iespējas, taču, lai sāktu, jums jāzina tikai nedaudz.

Pirmajai komandai mēģiniet izpildīt mvn pakete. Pat ja jums vēl nav avota koda, šīs komandas izpilde liek Mavenam lejupielādēt JUnit atkarību. Jūs varat pārbaudīt Maven reģistrēšanas rezultātu, lai pārliecinātos, vai atkarība ir ielādēta.

Atkarības apjoms

Jūs, iespējams, pamanījāt, ka JUnit atkarība POM piemērā ir atzīmēta kā darbības jomas pārbaude. Darbības joma ir svarīgs jēdziens atkarības pārvaldībā, kas būtībā ļauj noteikt un ierobežot, kā katra atkarība tiks izsaukta un izmantota jūsu projektā. The pārbaude tvērums nodrošina, ka atkarība ir pieejama, veicot testus, bet ne tad, kad lietotne ir iepakota izvietošanai.

Vēl viena izplatīta darbības joma ir ar nosacījumu, kas norāda ietvaram, ka atkarību nodrošina izpildlaika vide. Tas bieži tiek novērots, izmantojot Serversīklietotni JARS, izvietojot servleta konteinerā, jo konteiners nodrošinās šos JARS. Pilnu Maven atkarības jomu sarakstu skatiet Apache Maven dokumentācijā.

Maven direktoriju struktūra

Kad komanda ir pabeigta, ievērojiet, ka Maven ir izveidojis a / mērķis direktorijā. Tā ir standarta vieta jūsu projekta rezultātiem. Lejupielādētās atkarības atradīsies / mērķis direktoriju kopā ar apkopotajiem lietojumprogrammu artefaktiem.

Pēc tam vēlaties pievienot Java failu, kuru ievietosiet Maven src / direktorijā. Izveidojiet a /src/main/java/com/javaworld/Hello.java failu ar 2. saraksta saturu.

Saraksts 2. Hello.java

 com.javaworld public class Hello {public static void main (String [] args) {System.out.println ("Sveiki, JavaWorld"); }} 

The / src ceļš ir standarta avots jūsu projekta avota failiem. Lielākajā daļā projektu galvenie faili tiek ievietoti / src / main /, Java failiem nonākot klases ceļā zem / java. Turklāt, ja vēlaties iekļaut īpašumus, kas ir kodu, piemēram, konfigurācijas failus vai attēlus, varat izmantot / src / main / resources. Šajā ceļā esošie aktīvi tiks pievienoti galvenajam klases ceļam. Ietilpst testa faili / src / test / java.

Lai pārskatītu, šeit ir dažas galvenās Maven projekta struktūras daļas (kā definēts Maven standarta direktoriju struktūrā):

Galvenās Maven standarta direktoriju struktūras daļas

pom.xmlProjekta deskriptora fails
/ src / main / javaAvota failu atrašanās vieta
/ src / main / resourcesĀrpus avota esošo līdzekļu atrašanās vieta
/ src / test / javaTesta avota failu atrašanās vieta
/ mērķisUzbūves izvades atrašanās vieta

Maven projekta vadība

The mvn pakete komanda uzdod Mavenam apvienot projektu. Izdodiet šo komandu, kad esat gatavs apkopot visus projekta failus vienā vietā. Atgādināsim, ka šī projekta POM failā mēs iestatījām iepakojuma veidu burka, tāpēc šī komanda liek Mavenam iesaiņot lietojumprogrammas failus JAR.

Maven piedāvā dažādas papildu iespējas, kā kontrolēt JAR pārvaldību, neatkarīgi no tā, vai tas ir resns vai plāns JAR, un norādīt izpildāmo failu galvenā klase. Skatiet Maven dokumentus, lai uzzinātu vairāk par failu pārvaldību Maven.

Pēc tam, kad esat apvienojis projektu, jūs, iespējams, vēlēsities izdot mvn instalēt. Šī komanda iestumj projektu vietējā Maven repozitorijā. Kad tas atrodas vietējā repozitorijā, tas ir pieejams citiem vietējās sistēmas Maven projektiem. Tas ir noderīgi attīstības scenārijiem, kur jūs un / vai jūsu komanda izveidojat atkarības JAR, kas vēl nav publicēti centrālajā repozitorijā.

Papildu Maven komandas

Enter mvn tests kad esat gatavs veikt vienības testus, kurus esat definējis / src / java / tests direktorijā.

Enter mvn sastādīt kad esat gatavs apkopot projekta klases failus. Ja izmantojat karstās izvietošanas iestatīšanu, šī komanda aktivizē karsto izvietotāju klases iekrāvēju. (Karstās izvietošanas rīks, piemēram, Spring Boot's mvn spring-boot: palaist komanda - skatīsies, vai klases failos notiek izmaiņas, un, apkopojot, tiks apkopoti avota faili, un darbojošā lietojumprogramma atspoguļos šīs izmaiņas.)

Jauna projekta uzsākšana: arhetipi Mavenā un pavasarī

A Maven arhetips ir veidne jaunu projektu uzsākšanai, pamatojoties uz dažādiem iepriekš definētiem iestatījumiem. Katrs arhetips piedāvā iepriekš iepakotas atkarības, piemēram, Java EE vai Java tīmekļa lietojumprogrammu projektam. Varat arī izveidot jaunu arhetipu no esoša projekta un pēc tam izmantot to, lai ātri izveidotu jaunus projektus, pamatojoties uz šiem iepriekš definētajiem izkārtojumiem. Skatiet Maven dokumentus, lai uzzinātu vairāk par Apache Maven arhetipiem.

Pavasara ietvars, kas labi darbojas kopā ar Mavenu, piedāvā papildu, izsmalcinātas iespējas jaunu projektu nomākšanai. Piemēram, Spring Initializr ir rīks, kas ļauj ļoti ātri definēt vēlamos elementus jaunajā lietotnē. Initializr pats par sevi nav Maven arhetips, bet tas kalpo tam pašam mērķim - projekta izkārtojuma ģenerēšanai, pamatojoties uz priekšējām specifikācijām. Izmantojot Initializr, varat rakstīt mvn arhetips: ģenerēt un skenējiet iespējas, lai atrastu arhetipu, kas ir piemērots jūsu būvētajam.

Atkarību pievienošana