Programování

Co je Maven? Správa sestavení a závislostí pro Javu

Apache Maven je základním kamenem vývoje Javy a nejpoužívanějším nástrojem pro správu sestavení pro Javu. Zjednodušený konfigurační model Maven založený na XML umožňuje vývojářům rychle popsat nebo uchopit obrysy jakéhokoli projektu založeného na jazyce Java, což usnadňuje zahájení a sdílení nových projektů. Maven také podporuje vývoj založený na testech, dlouhodobou údržbu projektu a jeho deklarativní konfigurace a široká škála pluginů z něj činí oblíbenou volbu pro CI / CD. Tento článek představuje rychlý úvod do Mavenu, včetně Maven POM a adresářové struktury, a příkazů pro sestavení prvního projektu Maven.

Všimněte si, že nejnovější vydání Maven od tohoto psaní je Maven 3.6.3.

Maven vs Ant a Gradle

Maven není jediným nástrojem pro vytváření v ekosystému Java, i když je nejoblíbenější. Ant, dřívější generace konfiguračního nástroje založeného na XML, postrádá Mavenovy standardizované postupy založené na konvencích a správu závislostí, ale nabízí flexibilitu, kterou u Mavenu nenajdete. Gradle je novější nástroj, který běží nad ekosystémem Maven (pomocí úložišť Maven), ale podporuje použití DSL založeného na Groovy nebo Kotlin pro konfiguraci. Všechny tři jsou samy o sobě dobrým nástrojem pro sestavení a každý lze integrovat do procesu CI / CD. Důležité je vybrat si ten správný pro vaše potřeby a vědět, jak jej správně používat.

Jak Maven funguje

Stejně jako mnoho skvělých nástrojů i Maven bere to, co bylo kdysi příliš komplikované (peklo konfigurace), a zjednodušuje to na strávitelné části. Maven se skládá ze tří komponent:

  • POM: Soubor, který popisuje projekt Maven a jeho závislosti.
  • Adresář: Standardizovaný formát pro popis projektu Maven v POM.
  • Úložiště: Kde je uložen a objeven software třetí strany.

Maven POM: Každý projekt Java, který používá Maven, má v kořenovém adresáři soubor POM (projektový objektový model). The pom.xml popisuje závislosti projektu a řekne vám, jak jej postavit. (Závislosti jsou softwarem třetích stran požadovaným projektem. Některé běžné příklady jsou JUnit a JDBC. Seznam všech dostupných nástrojů a populárních závislostí najdete v centrálním úložišti Maven.)

Adresář Maven: Adresář Maven implementuje to, co je známé jako konvence nad konfigurací, elegantní řešení konfiguračního pekla. Spíše než vyžadovat, aby vývojáři definovali rozložení a ručně konfigurovali komponenty pro každý nový projekt (jak tomu bylo v případě makefile a Ant), Maven zavádí společnou strukturu projektu a nabízí standardní formát souboru pro popis toho, jak to funguje. Stačí připojit vaše požadavky a Maven zavolá závislosti a nakonfiguruje projekt za vás.

Centralizovaná úložiště: Nakonec Maven používá centralizovaná úložiště k objevování a publikování balíčků projektů jako závislostí. Když ve svém projektu odkazujete na závislost, Maven ji objeví v centralizovaném úložišti, stáhne ji do místního úložiště a nainstaluje do vašeho projektu. Většinu času je to pro vás jako vývojáře neviditelné.

Přístup k závislostem Maven

Ve výchozím nastavení Maven řeší závislosti z centrálního úložiště Maven. Běžnou alternativou je JCenter, který má širší sadu dostupných balíčků. Organizace také publikují a hostují interní úložiště, která mohou být veřejná nebo soukromá. Chcete-li získat přístup k úložišti, určíte jeho URL v Maven POM, nebo můžete instruovat Maven, aby hledal v jiných úložištích.

Instalace Maven

Maven je projekt Java, takže před jeho instalací musíte mít ve svém vývojovém prostředí nainstalován JDK. (Další informace o stahování a instalaci JDK najdete v části „Co je to JDK? Úvod do vývojové sady Java“.)

Jakmile máte nastaveno vývojové prostředí Java, můžete Maven nainstalovat jen v několika krocích:

  1. Stáhněte si nejnovější verzi Maven (Maven 3.6.3 od tohoto psaní).
  2. Extrahujte apache.maven Soubor ZIP na vhodné místo.
  3. Umístěte tento soubor na svou cestu. Například v systému Unix nebo Linux: export PATH = $ PATH: / home / maven /.

Nyní byste měli mít přístup k mvn příkaz. Typ mvn -v abyste se ujistili, že jste úspěšně nainstalovali Maven.

Maven POM

Kořenem každého projektu Maven je pom.xml soubor. Přes svoji pověst zdlouhavého XML ve skutečnosti funguje pro tento případ použití docela dobře. Mavenův POM je snadno čitelný a odhaluje mnoho z toho, co se v projektu děje. (Pokud jste pracovali s JavaScriptem, pom.xml je podobný účelu jako Node NPM balíček.json soubor.)

Výpis 1 ukazuje velmi jednoduchý Maven pom.xml.

Výpis 1. Simple Maven POM

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

Porozumění Maven POM

Jakmile se dostanete na kloub, POM není záhadný. Chcete-li začít, můžete přejít přes preambulu XML, která pouze odkazuje na oficiální schéma POM. Všimněte si XML počínaje modelVersion, nicméně. To říká Maven, jakou verzi POM použít, v tomto případě Maven POM 4.0.0.

Dále máte groupId, artifactId, a verze. Společně tyto tři atributy jednoznačně identifikují každý prostředek spravovaný Maven v úložišti. Tyto atributy v horní části souboru popisují váš projekt Maven.

Nyní se podívejte na závislosti část POM, kde popisujeme závislosti projektu. V tomto případě jsme zatím stáhli pouze jednu závislost, JUnit. Všimněte si, že JUnit je také popsán z hlediska svého groupId, artifactId, a verze.

Ať už popisujete svůj vlastní projekt nebo závislost projektu, tyto hodnoty konzistentně říkají Maven, kde najít projekt v úložišti Maven a která verze je k dispozici pro použití.

Hostování projektu v úložišti Maven

Mějte na paměti, že POM definuje vše, co váš projekt potřebuje ke spuštění, ale také popisuje váš projekt jako potenciální závislost. Pokud vytváříte projekt, který bude závislý - řekněme, že vytvoříte knihovnu pro další projekty, které chcete použít - budete ji muset zpřístupnit jedním ze čtyř způsobů:

  1. Zpřístupněte jej místně.
  2. Publikujte do soukromě spravovaného vzdáleného úložiště.
  3. Publikujte do cloudového soukromého úložiště.
  4. Publikujte do veřejného úložiště, jako je Maven Central.

V prvním případě vůbec nepoužíváte vzdálené úložiště. Místo toho si ostatní vývojáři stáhnou a nainstalují váš projekt místně do svého repozitáře Maven pomocí instalace mvn příkaz.

V druhém případě použijete hostované úložiště Maven a k publikování a stahování závislostí používáte soukromě ovládaný server. K tomu potřebujete správce úložiště, jako je Apache Archiva.

Novější alternativou je použití soukromého vzdáleného repo, ale při správě se spoléhejte na cloudovou službu, například Cloudsmith. To poskytuje výhodu vzdáleně hostovaných závislostí, aniž by bylo nutné postavit repo server. Tato služba je samozřejmě za poplatek.

Nakonec malé procento projektů skončí v Centrálním úložišti Maven nebo JCenter, které jsou určeny pro široce používané veřejné balíčky. Pokud vytváříte závislost na otevřeném zdroji, kterou budou používat ostatní, budete potřebovat jedno z těchto centralizovaných úložišť, aby byla vaše práce dostupná světu.

  • Zjistěte více o hostování vašeho projektu v úložišti Maven a získejte seznam dostupných úložišť.
  • Podívejte se na oficiální dokumentaci Maven o pluginu Maven Release, který se používá k přípravě a správě softwaru publikovaného v úložišti Maven.

Vytvořte balíček Maven

Pokud vytvoříte pom.xml ze seznamu 1 a vložte jej do adresáře, budete moci proti němu spouštět příkazy Maven. Maven má spoustu příkazů a další jsou k dispozici prostřednictvím pluginu, ale potřebujete jen pár hrstů, abyste mohli začít.

U prvního příkazu zkuste provést balíček mvn. I když ještě nemáte žádný zdrojový kód, spuštění tohoto příkazu řekne Mavenovi, aby si stáhl závislost JUnit. Můžete zkontrolovat výstup protokolování Maven a zjistit, že závislost byla načtena ..

Rozsah závislosti

Možná jste si všimli, že závislost JUnit je v příkladu POM označena jako test rozsahu. Rozsah je důležitý koncept ve správě závislostí, v podstatě vám umožňuje definovat a omezit, jak bude každá závislost volána a používána ve vašem projektu. The test rozsah zajišťuje, že závislost je k dispozici při spuštění testů, ale ne, když je aplikace zabalená pro nasazení.

Další společný rozsah je pokud, který říká rozhraní, že závislost je poskytována běhovým prostředím. To je často vidět u servletů JARS při nasazení do kontejneru servletu, protože kontejner tyto JARS poskytne. Úplný seznam oborů závislostí Maven najdete v dokumentaci Apache Maven.

Mavenova adresářová struktura

Po dokončení příkazu si všimněte, že Maven vytvořil a /cílová adresář. To je standardní umístění pro výstup vašeho projektu. Závislosti, které jste stáhli, budou umístěny v /cílová adresář spolu s vašimi zkompilovanými artefakty aplikace.

Dále chcete přidat soubor Java, který umístíte do Maven src / adresář. Vytvořit /src/main/java/com/javaworld/Hello.java soubor s obsahem výpisu 2.

Výpis 2. Hello.java

 com.javaworld veřejná třída Hello {public static void main (String [] args) {System.out.println ("Hello, JavaWorld"); }} 

The / src cesta je standardní místo pro zdrojové soubory vašeho projektu. Většina projektů vkládá své hlavní soubory / src / hlavní /, přičemž soubory Java jdou do cesty ke třídě pod /Jáva. Navíc, pokud chcete zahrnout aktiva, která jsou ne kód, například konfigurační soubory nebo obrázky, které můžete použít / src / main / resources. Aktiva v této cestě budou přidána do hlavní cesty ke třídě. Vstupte do testovacích souborů / src / test / java.

Chcete-li zkontrolovat, zde jsou některé klíčové části struktury projektu Maven (jak je definováno standardní strukturou adresáře Maven):

Klíčové části standardní struktury adresáře Maven

pom.xmlSoubor deskriptoru projektu
/ src / main / javaUmístění zdrojových souborů
/ src / main / resourcesUmístění zdrojů, která nejsou zdrojem
/ src / test / javaUmístění testovacích zdrojových souborů
/cílováUmístění výstupu sestavení

Správa vašeho projektu Maven

The balíček mvn příkaz dává Mavenovi svazkovat projekt. Vydejte tento příkaz, až budete připraveni shromáždit všechny soubory projektu na jednom místě. Připomeňme, že v souboru POM pro tento projekt jsme nastavili typ balení na sklenice, takže tento příkaz říká Mavenovi, aby zabalil soubory aplikace do JAR.

Maven nabízí celou řadu dalších možností pro řízení způsobu správy JAR, ať už jde o tlustý nebo tenký JAR, a určení spustitelného souboru hlavní třída. V dokumentech Maven se dozvíte více o správě souborů v Maven.

Poté, co jste spojili projekt, budete pravděpodobně chtít vydat a instalace mvn. Tento příkaz posune projekt do místního úložiště Maven. Jakmile je v místním úložišti, je k dispozici dalším projektům Maven ve vašem místním systému. To je užitečné pro vývojová sceneria, kde vy nebo váš tým vytváříte soubory JAR závislostí, které ještě nejsou publikovány v centrálním úložišti.

Další příkazy Maven

Enter test MVN když jste připraveni spustit jednotkové testy, které jste definovali v / src / java / test adresář.

Enter MVV kompilace až budete připraveni kompilovat soubory tříd projektu. Pokud používáte instalační program hot-deploy, tento příkaz aktivuje zavaděč třídy hot deploying. (Hot-deploy nástroj - jako Spring Boot mvn spring-boot: spustit příkaz - bude sledovat změny tříd a kompilace způsobí kompilaci zdrojových souborů a spuštěná aplikace tyto změny odráží.)

Zahájení nového projektu: Archetypy v Maven a Spring

A Maven archetyp je šablona pro spouštění nových projektů na základě různých předdefinovaných nastavení. Každý archetyp nabízí předem zabalené závislosti, například pro projekt Java EE nebo webovou aplikaci Java. Můžete také vytvořit nový archetyp z existujícího projektu a poté jej použít k rychlému vytvoření nových projektů na základě těchto předdefinovaných rozvržení. V dokumentech Maven se dozvíte více o archetypech Apache Maven.

Rámec Spring, který dobře funguje s Mavenem, nabízí další, sofistikované funkce pro odstranění nových projektů. Například Spring Initializr je nástroj, který vám umožní velmi rychle definovat požadované prvky v nové aplikaci. Initializr není archetyp Maven sám o sobě, ale slouží ke stejnému účelu generování rozložení projektu na základě up-front specifikací. V rámci Initializr můžete psát mvn archetyp: generovat a prohlédněte si možnosti a najděte archetyp vhodný pro to, co stavíte.

Přidání závislostí

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