Programmering

Hva er Maven? Bygg og avhengighetsadministrasjon for Java

Apache Maven er en hjørnestein i Java-utvikling, og det mest brukte verktøyet for byggeadministrasjon for Java. Mavens strømlinjeformede, XML-baserte konfigurasjonsmodell gjør det mulig for utviklere å raskt beskrive eller forstå konturene til ethvert Java-basert prosjekt, noe som gjør det enkelt å starte og dele nye prosjekter. Maven støtter også testdrevet utvikling, langsiktig prosjektvedlikehold, og dens deklarative konfigurasjon og et bredt utvalg av plugins gjør det til et populært alternativ for CI / CD. Denne artikkelen er en rask introduksjon til Maven, inkludert Maven POM og katalogstruktur, og kommandoer for å bygge ditt første Maven-prosjekt.

Merk at den siste Maven-utgivelsen i skrivende stund er Maven 3.6.3.

Maven vs Ant og Gradle

Maven er ikke det eneste byggeverktøyet i Java-økosystemet, selv om det er det mest populære. Ant, en tidligere generasjon av XML-basert konfigurasjonsverktøy, mangler Mavens standardiserte, konvensjonsbaserte fremgangsmåter og avhengighetsadministrasjon, men tilbyr fleksibilitet du ikke finner med Maven. Gradle er et nyere verktøy som kjører på toppen av Maven-økosystemet (ved hjelp av Mavens repositories), men støtter bruk av en Groovy- eller Kotlin-basert DSL for konfigurasjon. Alle tre er gode byggeverktøy i seg selv, og hver kan integreres i en CI / CD-prosess. Det som betyr noe er å velge den rette for dine behov og vite hvordan du bruker den riktig.

Hvordan Maven fungerer

Som mange gode verktøy tar Maven det som en gang var overkomplisert (konfigurasjonshelvete) og forenkler det til fordøyelige deler. Maven består av tre komponenter:

  • POM: Filen som beskriver et Maven-prosjekt og dets avhengighet.
  • Katalogen: Det standardiserte formatet for beskrivelse av et Maven-prosjekt i POM.
  • Repositories: Hvor tredjeparts programvare lagres og oppdages.

Maven POM: Hvert Java-prosjekt som bruker Maven har en POM-fil (prosjektobjektmodell) i rotkatalogen. De pom.xml beskriver prosjektets avhengigheter og forteller deg hvordan du bygger det. (Avhengigheter er tredjeparts programvare som kreves av prosjektet. Noen vanlige eksempler er JUnit og JDBC. Se Maven Central Repository for en liste over alle tilgjengelige verktøy og populære avhengigheter.)

Maven-katalogen: Maven-katalogen implementerer det som kalles konvensjon over konfigurasjon, en elegant løsning på konfigurasjonshelvete. Snarere enn å kreve at utviklere definerer layout og håndkonfigurerer komponenter for hvert nye prosjekt (som det var tilfellet med makefile og Ant), Maven innfører en felles prosjektstruktur og tilbyr et standard filformat for å beskrive hvordan det fungerer. Du kobler bare inn dine krav, og Maven kaller inn avhengigheter og konfigurerer prosjektet for deg.

Sentraliserte arkiver: Til slutt bruker Maven sentraliserte arkiver for både å oppdage og publisere prosjektpakker som avhengigheter. Når du refererer til en avhengighet i prosjektet ditt, vil Maven oppdage det i det sentraliserte depotet, laste det ned til et lokalt depot og installere det i prosjektet ditt. Mesteparten av tiden er alt dette usynlig for deg som utvikler.

Få tilgang til Maven-avhengigheter

Som standard løser Maven avhengigheter fra Maven Central Repository. Et vanlig alternativ er JCenter, som har et bredere sett med tilgjengelige pakker. Organisasjoner publiserer og vert også interne arkiver, som kan være offentlige eller private. For å få tilgang til et depot, spesifiserer du URL-en i Maven POM, eller du kan be Maven om å se i andre arkiver.

Installerer Maven

Maven er et Java-prosjekt, så før du installerer det, må du ha JDK installert i utviklingsmiljøet ditt. (Se "Hva er JDK? Introduksjon til Java Development Kit" for mer om nedlasting og installering av JDK.)

Når du har konfigurert Java-utviklingsmiljøet, kan du installere Maven i bare noen få trinn:

  1. Last ned den siste Maven-utgivelsen (Maven 3.6.3 når dette skrives).
  2. Pakk ut apache.maven .zip-fil til et praktisk sted.
  3. Plasser filen på din vei. For eksempel på et Unix- eller Linux-system: eksport PATH = $ PATH: / hjem / maven /.

Du bør nå ha tilgang til mvn kommando. Type mvn -v for å sikre at du har installert Maven.

Maven POM

Roten til hvert Maven-prosjekt er pom.xml fil. Til tross for sitt rykte for å være kjedelig, fungerer XML faktisk ganske bra for denne brukssaken. Mavens POM er lett å lese og avslører mye av det som skjer i et prosjekt. (Hvis du har jobbet med JavaScript, vil pom.xml har samme formål som Node NPM pakke.json fil.)

Oppføring 1 viser en veldig enkel Maven pom.xml.

Oppføring 1. Simple Maven POM

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

Forstå Maven POM

Når du først har fått tak i det, er ikke POM mystisk. For å starte kan du skimme over XML-innledningen, som bare refererer til det offisielle POM-skjemaet. Legg merke til XML som begynner med modellversjon, derimot. Det forteller Maven hvilken versjon av POM som skal brukes, i dette tilfellet Maven POM 4.0.0.

Neste, du har groupId, artefaktId, og versjon. Til sammen identifiserer disse tre attributtene hver Maven-administrerte ressurs i depotet unikt. Disse attributtene øverst i filen beskriver Maven-prosjektet ditt.

Ta en titt på avhengigheter delen av POM, hvor vi beskriver prosjektets avhengighet. I dette tilfellet har vi trukket inn bare en avhengighet så langt, JUnit. Legg merke til at JUnit også er beskrevet i form av dens groupId, artefaktId, og versjon.

Enten du beskriver ditt eget prosjekt eller en prosjektavhengighet, forteller disse verdiene Maven konsekvent hvor du skal finne et prosjekt i Maven-arkivet, og hvilken versjon som er tilgjengelig for bruk.

Hosting prosjektet ditt i et Maven-depot

Husk at POM definerer alt prosjektet ditt trenger å kjøre, men det beskriver også prosjektet ditt som en potensiell avhengighet. Hvis du bygger et prosjekt som vil være en avhengighet - for eksempel å lage et bibliotek for andre prosjekter som skal brukes - må du gjøre det tilgjengelig på en av fire måter:

  1. Gjør den tilgjengelig lokalt.
  2. Publiser til et privat administrert eksternt arkiv.
  3. Publiser til et skybasert privat arkiv.
  4. Publiser til et offentlig arkiv som Maven Central.

I det første tilfellet bruker du ikke et eksternt lager i det hele tatt. I stedet vil andre utviklere laste ned og installere prosjektet lokalt til deres Maven repo, ved hjelp av mvn installere kommando.

I det andre tilfellet bruker du et hostet Maven-arkiv, og bruker privat kontrollert server for å publisere og laste ned avhengigheter. For dette trenger du en depotleder, som Apache Archiva.

Et nyere alternativ er å bruke en privat ekstern repo, men stole på en skybasert tjeneste for å administrere den, for eksempel Cloudsmith. Dette gir fordelen med ekstern avhengighet uten arbeid med å stå opp en reposerver. Den tjenesten er selvfølgelig mot et gebyr.

Til slutt vil en liten prosentandel av prosjektene havne i Central Maven Repository eller JCenter, som er ment for mye brukte, offentlige pakker. Hvis du lager en avhengighet med åpen kildekode som skal brukes av andre, trenger du et av disse sentraliserte arkivene for å gjøre arbeidet ditt tilgjengelig for verden.

  • Lær mer om å være vert for prosjektet ditt i et Maven-arkiv og få en liste over tilgjengelige arkiver.
  • Se den offisielle Maven-dokumentasjonen om Maven Release Plugin, som brukes til å forberede og administrere programvare som er publisert i et Maven-arkiv.

Bygg Maven-pakken

Hvis du oppretter pom.xml fra oppføring 1 og legg den i en katalog, vil du kunne kjøre Maven-kommandoer mot den. Maven har mange kommandoer, og flere er tilgjengelige via plugin, men du trenger bare å vite en håndfull for å starte.

Prøv å utføre for din første kommando mvn-pakke. Selv om du ikke har noen kildekode ennå, utfører denne kommandoen Maven å laste ned JUnit-avhengigheten. Du kan sjekke Mavens loggoutput for å se at avhengigheten er lastet ..

Avhengighetsomfang

Du har kanskje lagt merke til at JUnit-avhengigheten i eksemplet POM er merket som omfangstest. omfang er et viktig konsept i avhengighetsstyring, som i hovedsak lar deg definere og begrense hvordan hver avhengighet skal kalles og brukes i prosjektet ditt. De test omfang sikrer at avhengigheten er tilgjengelig når du kjører tester, men ikke når appen er pakket for distribusjon.

Et annet vanlig omfang er sørget for, som forteller rammeverket at avhengigheten er gitt av kjøretidsmiljøet. Dette sees ofte med Servlet JARS når du distribuerer til en servletcontainer, da containeren vil gi disse JARS. Se Apache Maven-dokumentasjonen for en komplett liste over Maven-avhengighetsomfang.

Mavens katalogstruktur

Når kommandoen er ferdig, legg merke til at Maven har opprettet en /mål katalog. Det er standardplasseringen for prosjektets produksjon. Avhengigheter du har lastet ned ligger i /mål katalog, sammen med dine kompilerte applikasjonsgjenstander.

Deretter vil du legge til en Java-fil som du vil plassere i Maven src / katalog. Lage en /src/main/java/com/javaworld/Hello.java fil, med innholdet i oppføring 2.

Oppføring 2. Hello.java

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

De / src banen er standard stedet for prosjektets kildefiler. De fleste prosjekter legger inn hovedfilene sine / src / main /, med Java-filer som går inn på klassestien under / java. I tillegg, hvis du vil inkludere eiendeler som er ikke kode, som konfigurasjonsfiler eller bilder, kan du bruke / src / main / resources. Eiendeler i denne banen vil bli lagt til i hovedklassen. Testfiler går inn på / src / test / java.

Her er noen viktige deler av en Maven-prosjektstruktur (som definert av Maven Standard Directory Structure):

Viktige deler av Maven Standard Directory Structure

pom.xmlProsjektbeskrivelsesfilen
/ src / main / javaPlassering av kildefiler
/ src / main / resourcesPlassering av ikke-kilde eiendeler
/ src / test / javaPlassering av testkildefiler
/målPlassering av byggeutgangen

Administrere Maven-prosjektet ditt

De mvn-pakke kommandoen instruerer Maven om å pakke sammen prosjektet. Gi ut denne kommandoen når du er klar til å samle alle prosjektfilene dine på ett sted. Husk at i POM-filen for dette prosjektet setter vi innpakningstypen til å være krukke, så denne kommandoen forteller Maven å pakke applikasjonsfilene i en JAR.

Maven tilbyr en rekke tilleggsalternativer for å kontrollere hvordan JAR administreres, enten det er en tykk eller tynn JAR, og spesifisere en kjørbar hovedklasse. Se Maven-dokumentene for å lære mer om filbehandling i Maven.

Etter at du har samlet et prosjekt, vil du sannsynligvis ønske å utstede et mvn installere. Denne kommandoen skyver prosjektet inn i det lokale Maven-depotet. Når det er i det lokale depotet, er det tilgjengelig for andre Maven-prosjekter i ditt lokale system. Dette er nyttig for utviklingsscenarioer der du og / eller teamet ditt lager avhengighets-JARer som ennå ikke er publisert i et sentralt depot.

Flere Maven-kommandoer

Tast inn mvn test når du er klar til å kjøre enhetstester du har definert i / src / java / test katalog.

Tast inn mvn kompilere når du er klar til å kompilere prosjektets klassefiler. Hvis du kjører et hot-deploy-oppsett, utløser denne kommandoen hot-deploying class loader. (Hot-deploy-verktøyet - som Spring Boot's mvn spring-boot: run kommando - vil se på klassefilene for endringer, og kompilering vil føre til at kildefilene dine blir kompilert, og det kjørende programmet vil gjenspeile disse endringene.)

Starter et nytt prosjekt: Arketyper i Maven og Spring

EN Maven arketype er en mal for å starte nye prosjekter basert på en rekke forhåndsdefinerte innstillinger. Hver arketype tilbyr forhåndspakkede avhengigheter, for eksempel for et Java EE- eller Java-webapplikasjonsprosjekt. Du kan også opprette en ny arketype fra et eksisterende prosjekt, og deretter bruke den til å raskt opprette nye prosjekter basert på de forhåndsdefinerte oppsettene. Se Maven-dokumentene for å lære mer om Apache Maven-arketyper.

Spring-rammeverket, som fungerer bra med Maven, tilbyr ytterligere, sofistikerte muligheter for å stanse nye prosjekter. Som et eksempel er Spring Initializr et verktøy som lar deg raskt definere elementene du vil ha i en ny app. Initializr er ikke en Maven-arketype, i seg selv, men den tjener det samme formålet med å generere et prosjektoppsett basert på forhåndsspesifikasjoner. Fra Initializr kan du skrive mvn arketype: generer og skann gjennom alternativene for å finne en arketype som passer for det du bygger.

Legge til avhengigheter

$config[zx-auto] not found$config[zx-overlay] not found