Installer lokal krukke med Maven

1. Problemet og mulighederne

Maven er et meget alsidigt værktøj, og dets tilgængelige offentlige opbevaringssteder er uden sidestykke. Imidlertid vil der altid være en artefakt, der er enten ikke vært hvor som helst, eller lageret, hvor det er hostet, er risikabelt at afhænge af, da det muligvis ikke er op, når du har brug for det.

Når det sker, er der et par valg:

  • bide kuglen og installere en fuldgyldig lagerstyring løsning som Nexus
  • prøv at få artefakten uploadet til et af mere velrenommerede offentlige arkiver
  • installer artefakten lokalt ved hjælp af et maven-plugin

Nexus er selvfølgelig den mere modne løsning, men det er også jo mere kompleks. Tilvejebringelse af en instans til at køre Nexus, opsætning af Nexus selv, konfiguration og vedligeholdelse af det kan være overkill for et så simpelt problem som at bruge en enkelt krukke. Hvis dette scenarie - der er vært for brugerdefinerede artefakter - er almindeligt, giver en lageradministrator dog meget mening.

At få artefakten uploadet til et offentligt arkiv eller i Maven central er direkte også en god løsning, men normalt en langvarig løsning. Derudover er biblioteket muligvis ikke aktiveret Maven overhovedet, hvilket gør processen meget vanskeligere, så det er ikke en realistisk løsning for at kunne bruge artefakten NU.

Det efterlader den tredje mulighed - tilføj artefakten i kildekontrol og brug af et maven-plugin - i dette tilfælde maven-install-plugin til installer det lokalt, før byggeprocessen har brug for det. Dette er langt den nemmeste og mest pålidelige mulighed, der er tilgængelig.

2. Installer lokal krukke med maven-install-plugin

Lad os starte med den fulde konfiguration, der er nødvendig for at installere artefakten i vores lokale arkiv:

 org.apache.maven.plugins maven-install-plugin 2.5.1 org.somegroup someartifact 1.0 jar $ {basedir} /dependencies/someartifact-1.0.jar true install-jar-lib installationsfil validere 

Lad os nu nedbryde og analysere detaljerne i denne konfiguration.

2.1. Artefaktoplysningerne

Artefaktoplysningerne er defineret som en del af element. Den faktiske syntaks ligner meget på at erklære afhængighed - a groupId, artefaktId og version elementer.

Den næste del af konfigurationen kræver, at du definerer emballage af artefakten - dette er specificeret som krukke.

Dernæst skal vi levere Beliggenhed af den faktiske jar-fil, der skal installeres - dette kan være en absolut filsti, eller den kan være relativ ved hjælp af ejendomme tilgængelige i Maven. I dette tilfælde er $ {basedir} egenskab repræsenterer projektets rod, nemlig det sted, hvor pom.xml filen findes. Dette betyder, at someartifact-1.0.jar filen skal placeres i en / afhængigheder / katalog under roden.

Endelig er der flere andre valgfri detaljer, der også kan konfigureres.

2.2. Henrettelsen

Udførelsen af installationsfil mål er bundet til valider fase fra Maven-standard-livscyklussen. Før du prøver at kompilere, skal du køre valideringsfasen eksplicit:

mvn validere

Efter dette trin fungerer standardkompilering:

mvn ren installation

Når kompileringsfasen er udført, er vores someartifact-1.0.jar er korrekt installeret i vores lokale arkiv, ligesom enhver anden artefakt, der muligvis er hentet fra selve Maven central.

2.3. Generere en POM vs Levering af POM

Spørgsmålet om, hvorvidt vi har brug for at levere en pom.xml filen til artefakten eller ej afhænger hovedsageligt af runtime afhængigheder af selve artefakten. Kort sagt, hvis artefakten har afhængighed af runtime på andre krukker, skal disse krukker være til stede på klassestien også ved runtime. Med en simpel artefakt, der ikke burde være et problem, da den sandsynligvis ikke har nogen afhængigheder ved kørsel (et blad i afhængighedsgrafen).

Det genererePom indstilling i installationsfil mål skal være tilstrækkeligt til disse slags artefakter:

rigtigt

Men hvis artefakten er mere kompleks og ikke har triviel afhængigheder, så hvis disse afhængigheder ikke allerede er i klassestien, skal de tilføjes. En måde at gøre det på er ved at definere disse nye afhængigheder manuelt i projektets pom-fil. En bedre løsning er at give en brugerdefineret pom.xml fil sammen med den installerede artefakt:

falske $ {basedir} /afhængigheder/someartifact-1.0.pom

Dette giver Maven mulighed for at løse alle afhængigheder af artefakten, der er defineret i denne brugerdefinerede pom.xmluden at skulle definere dem manuelt i projektets hovedpom-fil.

3. Konklusion

Denne artikel gennemgår, hvordan man bruger en krukke, der ikke er placeret nogen steder i et Maven-projekt, ved at installere den lokalt med maven-install-plugin.