Programování

Úvod do Maven 2

Maven je populární nástroj pro vytváření open source pro podnikové projekty Java, který je navržen tak, aby odvedl většinu tvrdé práce z procesu sestavení. Maven používá deklarativní přístup, kde je popsána struktura a obsah projektu, spíše než přístup založený na úkolech použitý například v Ant nebo v tradičních souborech make. To pomáhá prosazovat vývojové standardy pro celou společnost a zkracuje čas potřebný k psaní a údržbě skriptů sestavení.

Deklarativní přístup založený na životním cyklu, který používá Maven 1, je pro mnohé radikálním odklonem od tradičnějších technik sestavování a Maven 2 jde v tomto ohledu ještě dále. V tomto článku procházím některými základními principy za Mavenem 2 a poté procházím fungujícím příkladem. Začněme přezkoumáním základů Maven 2.

Objektový model projektu

Srdcem projektu Maven 2 je objektový model projektu (nebo zkráceně POM). Obsahuje podrobný popis vašeho projektu, včetně informací o správě verzí a správy konfigurace, závislostech, aplikačních a testovacích zdrojích, členech týmu a struktuře a mnoho dalšího. POM má formu souboru XML (pom.xml), který je umístěn ve vašem domovském adresáři projektu. Zde je zobrazen jednoduchý soubor pom.xml:

 4.0.0 com.javaworld.hotels HotelDatabase war 1.0-SNAPSHOT Maven Rychlý start Archetyp //maven.apache.org junit junit 3.8.1 test 

Struktura adresáře Maven 2

Velká část Mavenovy síly pochází ze standardních postupů, které podporuje. Vývojář, který dříve pracoval na projektu Maven, bude okamžitě obeznámen se strukturou a organizací nového. Nemusíte zbytečně ztrácet čas objevováním adresářových struktur, konvencí a přizpůsobených skriptů pro vytváření Ant pro každý projekt. I když můžete přepsat jakékoli konkrétní umístění adresáře pro své vlastní konkrétní cíle, měli byste opravdu respektovat standardní strukturu adresáře Maven 2 v maximální možné míře, a to z několika důvodů:

  • Váš soubor POM je menší a jednodušší
  • To usnadňuje pochopení projektu a usnadňuje život chudákovi, který musí projekt udržovat, když odjíždíte
  • Usnadňuje integraci zásuvných modulů

Standardní adresářová struktura Maven 2 je znázorněna na obrázku 1. V domovském adresáři projektu jde POM (pom.xml) a dva podadresáře: src pro veškerý zdrojový kód a cíl pro generované artefakty.

Adresář src má řadu podadresářů, z nichž každý má jasně definovaný účel:

  • src / main / java: Váš zdrojový kód Java jde sem (kupodivu!)
  • src / main / resources: Další zdroje, které vaše aplikace potřebuje
  • src / main / filtry: Filtry zdrojů ve formě souborů vlastností, které lze použít k definování proměnných známých pouze za běhu
  • src / main / config: Konfigurační soubory
  • src / main / webapp: Adresář webové aplikace pro projekt WAR
  • src / test / java: Jednotkové testy
  • src / test / zdroje: Prostředky, které se mají použít pro jednotkové testy, ale nebudou nasazeny
  • src / test / filtry: Filtry prostředků, které se mají použít pro testy jednotek, ale nebudou nasazeny
  • src / web: Soubory použité ke generování webových stránek projektu Maven

Životní cykly projektu

Životní cykly projektů jsou pro Maven 2. Ústředním tématem Maven 2. Většina vývojářů je obeznámena s pojmem fází sestavení, jako je kompilace, testování a nasazení. Ant má cíle s takovými jmény. V Maven 1 jsou odpovídající pluginy volány přímo. Například ke kompilaci zdrojového kódu Java Jáva používá se zásuvný modul:

$ maven java: kompilace

V Maven 2 je tento pojem standardizován do sady dobře známých a dobře definovaných fází životního cyklu (viz obrázek 2). Místo vyvolání modulů plug-in vyvolá vývojář Maven 2 fázi životního cyklu: $ mvn kompilace.

Některé z užitečnějších fází životního cyklu Maven 2 jsou následující:

  • generovat zdroje: Generuje veškerý další zdrojový kód potřebný pro aplikaci, což se obvykle provádí pomocí příslušných doplňků
  • kompilovat: Zkompiluje zdrojový kód projektu
  • test-kompilace: Zkompiluje testy projektové jednotky
  • test: Spustí testy jednotky (obvykle pomocí JUnit) v adresáři src / test
  • balík: Zabalí zkompilovaný kód do jeho distribuovatelného formátu (JAR, WAR atd.)
  • integrační test: Zpracuje a v případě potřeby nasadí balíček do prostředí, kde lze spustit integrační testy
  • Nainstalujte: Nainstaluje balíček do místního úložiště pro použití jako závislost v jiných projektech na vašem místním počítači
  • nasadit: Hotovo v prostředí integrace nebo vydání, zkopíruje finální balíček do vzdáleného úložiště pro sdílení s dalšími vývojáři a projekty

K dispozici je mnoho dalších fází životního cyklu. Další informace najdete v části Zdroje.

Tyto fáze ilustrují výhody doporučených postupů podporovaných Mavenem 2: jakmile je vývojář obeznámen s hlavními fázemi životního cyklu Maven 2, měl by se cítit v pohodě s fázemi životního cyklu jakéhokoli projektu Maven.

Fáze životního cyklu vyvolává zásuvné moduly, které potřebuje k provedení své práce. Vyvolání fáze životního cyklu automaticky vyvolá i všechny předchozí fáze životního cyklu. Jelikož počet fází životního cyklu je omezený, snadno srozumitelný a dobře organizovaný, seznámení se s životním cyklem nového projektu Maven 2 je snadné.

Přechodné závislosti

Jedním z vrcholů Maven 2 je tranzitivní správa závislostí. Pokud jste někdy používali nástroj jako urpmi na Linuxovém boxu budete vědět, co jsou přechodné závislosti. S Maven 1 musíte deklarovat každý JAR, který bude vaše aplikace přímo nebo nepřímo potřebovat. Můžete například uvést seznam JAR, které aplikace Hibernate potřebuje? S Maven 2 nemusíte. Prostě řeknete Mavenovi, které knihovny vy a Maven se postará o knihovny, které vaše knihovny potřebují (atd.).

Předpokládejme, že chcete ve svém projektu použít režim spánku. Jednoduše byste přidali novou závislost do závislosti sekce v pom.xml, takto:

  hibernace hibernace 3.0.3 kompilace 

A to je vše! Nemusíte lovit, abyste věděli, ve kterých dalších JAR (a ve kterých verzích) potřebujete spustit Hibernate 3.0.3; Maven to udělá za vás!

Struktura XML pro závislosti v Maven 2 je podobná struktuře použité v Maven 1. Hlavní rozdíl je rozsah tag, který je vysvětlen v následující části.

Rozsahy závislostí

V podnikové aplikaci v reálném světě možná nebudete muset zahrnout všechny závislosti v nasazené aplikaci. Některé soubory JAR jsou potřebné pouze pro testování jednotek, zatímco jiné budou za běhu poskytovány aplikačním serverem. Pomocí techniky zvané rozsah závislostíMaven 2 vám umožňuje používat určité JAR pouze tehdy, když je skutečně potřebujete, a vylučuje je z cesty ke třídě, pokud je nepoužíváte.

Maven poskytuje čtyři obory závislostí:

  • kompilovat: Závislost rozsahu kompilace je k dispozici ve všech fázích. Toto je výchozí hodnota.
  • pokud: Poskytovaná závislost se používá ke kompilaci aplikace, ale nebude nasazena. Tento rozsah byste použili, když očekáváte, že soubor JAR poskytne JDK nebo aplikační server. Dobrým příkladem jsou API servletů.
  • runtime: Závislosti běhového rozsahu nejsou pro kompilaci potřeba, pouze pro provedení, například ovladače JDBC (Java Database Connectivity).
  • test: Závislosti rozsahu testů jsou potřeba pouze ke kompilaci a spuštění testů (například JUnit).

Komunikace projektu

Důležitou součástí každého projektu je interní komunikace. I když to není stříbrná kulka, centralizovaný technický projektový web může udělat dlouhou cestu ke zlepšení viditelnosti v týmu. S minimálním úsilím můžete za velmi krátkou dobu zprovoznit webovou stránku projektu v profesionální kvalitě.

To vyžaduje zcela novou dimenzi, když je generování stránek Maven integrováno do procesu sestavování pomocí kontinuální integrace nebo dokonce automatických nočních sestavení. Typický web Maven může denně publikovat:

  • Obecné informace o projektu, jako jsou zdrojová úložiště, sledování defektů, členové týmu atd.
  • Jednotkové testy a zprávy o pokrytí testů
  • Automatické kontroly kódu a s Checkstyle a PMD
  • Informace o konfiguraci a verzi
  • Závislosti
  • Javadoc
  • Zdrojový kód v indexovaném a křížem odkazovaném formátu HTML
  • Seznam členů týmu
  • A mnohem víc

Opět bude každý vývojář, který je zdatný v Maven, okamžitě vědět, kde hledat, aby se seznámil s novým projektem Maven 2.

Praktický příklad

Nyní, když jsme viděli několik základních pojmů používaných v Maven 2, podívejme se, jak to funguje ve skutečném světě. Zbytek tohoto tutoriálu zkoumá, jak bychom použili Maven 2 v jednoduchém projektu Java Enterprise Edition. Demo aplikace zahrnuje imaginární (a zjednodušený) databázový systém hotelů. Abychom předvedli, jak Maven zpracovává závislosti mezi projekty a komponentami, bude tato aplikace vytvořena pomocí dvou komponent (viz obrázek 3):

  • Komponenta obchodní logiky: HotelDatabase.jar
  • Komponenta webové aplikace: HotelWebApp.war

Můžete si stáhnout zdrojový kód, který budete následovat spolu s tutoriálem v části Zdroje.

Nastavte prostředí svého projektu

Začínáme konfigurací vašeho pracovního prostředí. V projektech v reálném světě budete často muset definovat a konfigurovat prostředí nebo parametry specifické pro uživatele, které by neměly být distribuovány všem uživatelům. Pokud jste například za bránou firewall s proxy, musíte nakonfigurovat nastavení proxy, aby mohl Maven stahovat soubory JAR z úložišť na webu. Pro uživatele Maven 1 tuto práci dělají soubory build.properties a project.properties. V Maven 2 byly nahrazeny souborem settings.xml, který se nachází v adresáři $ HOME / .m2. Zde je příklad:

     http scott tiger 8080 my.proxy.url 

Vytvořte nový projekt pomocí doplňku archetypu

Dalším krokem je vytvoření nové šablony projektu Maven 2 pro komponentu obchodní logiky. Maven 2 poskytuje archetyp plug-in, který vytváří prázdnou adresářovou strukturu projektu kompatibilní s Maven 2. Tento modul plug-in se ukázal jako vhodný pro rychlé zprovoznění základního prostředí projektu. Výchozí model archetypu vytvoří projekt knihovny JAR. Několik dalších typů artefaktů je k dispozici pro jiné konkrétní typy projektů, včetně webových aplikací, modulů plug-in Maven a dalších.

Spuštěním následujícího příkazu nastavíte svůj projekt HotelDatabase.jar:

mvn archetyp: create -DgroupId = com.javaworld.hotels - DartifactId = HotelDatabase -Dpackagename = com.javaworld.hotels

Nyní máte zcela novou strukturu adresářů projektu Maven 2. Přepněte na HotelDatabase pokračujte v tutoriálu.

Implementace obchodní logiky

Nyní implementujeme obchodní logiku. The Hotel třída je jednoduchý JavaBean. The HotelModel třída implementuje dvě služby: findAvailableCities () metoda, která uvádí dostupná města, a findHotelsByCity () metoda, která obsahuje seznam všech hotelů v daném městě. Jednoduchá implementace paměti založená na paměti HotelModel třída je uvedena zde:

balíček com.javaworld.hotels.model;

import java.util.ArrayList; import java.util.List;

import com.javaworld.hotels.businessobjects.Hotel;

veřejná třída HotelModel {

/ ** * Seznam všech známých měst v databázi. * / private static String [] cities = {"Paris", "London",}; / ** * Seznam všech hotelů v databázi. * / private static Hotel [] hotels = {new Hotel ("Hotel Latin", "Quartier latin", "Paris", 3), new Hotel ("Hotel Etoile", "Place de l'Etoile", "Paris", 4), nový hotel („Hotel Vendome“, „Place Vendome“, „Paříž“, 5), nový hotel („Hotel Hilton“, „Trafalgar Square“, „Londýn“, 4), nový hotel („Hotel Ibis“ , "Město", "Londýn", 3),}; / ** * Vrátí hotely v daném městě. * @param city název města * @return seznam hotelových objektů * / public List findHotelsByCity (město řetězce) {List hotelsFound = new ArrayList (); for (Hotel hotel: hotels) {if (hotel.getCity (). equalsIgnoreCase (city)) {hotelsFound.add (hotel); }} vrátit hotelyNalezeno; } / ** * Vrátí seznam měst v databázi, která mají hotel. * @return a list of names names * / public String [] findAvailableCities () {návrat měst; }}

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