Apache MavenApache Maven – narzędzie automatyzujące budowę oprogramowania na platformę Java. Poszczególne funkcje Mavena realizowane są poprzez wtyczki, które są automatycznie pobierane przy ich pierwszym wykorzystaniu. Plik określający sposób budowy aplikacji nosi nazwę POM-u (ang. Project Object Model). Maven wywodzi się z projektu Jakarta. Tak jak i inne produkty fundacji Apache, Maven jest rozprowadzany na licencji Apache License. Proces budowaniaCeleBudowanie oprogramowania ma zakończyć się osiągnięciem wybranego przez budującego celu. Dostępnych celów jest wiele. Pula celów nie jest bezpośrednio określona przez twórcę POM-a, tak jak ma to miejsce w przypadku Anta lub Make'a, lecz przez wtyczki rozszerzające funkcjonalność Mavena. Poszczególne cele mogą wymagać wcześniejszej realizacji innych celów, np. cel package (zbudowanie paczki dystrybucyjnej) wymaga uprzedniej realizacji compile (kompilacja kodów źródłowych) oraz test (uruchomienie testów automatycznych). Główny cykl życiaMianem głównego cyklu życia projektu określa się uszeregowanych kolejno osiem najważniejszych z punktu widzenia budowy aplikacji celów. Powodzenie każdego kolejnego celu uzależnione jest od pomyślnej realizacji celów znajdujących się wcześniej w cyklu.
Ponadto Apache Maven może wykonać dodatkowe kroki, jeżeli jest to zdefiniowane w POM-ie, np. wygenerować stronę internetową projektu. POMPOM, czyli Project Object Model, to dokument XML-owy kompleksowo opisujący projekt. POM nie tylko precyzuje szczegóły budowy produktu, ale też może przechowywać informacje o zespole programistów, zastosowanych systemach wspomagających rozwój oprogramowania itd[1]. W Mavenie dokument POM nosi nazwę pom.xml. Przykładowy POM<project>
<modelVersion>4.0.0</modelVersion>
<!-- Podstawowe informacje dla Mavena -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Ustawienia budowania -->
<build>...</build>
<!-- Ustawienia generowania strony HTML z dokumentacją i raportami -->
<reporting>...</reporting>
<!-- Ogólne informacje o projekcie -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Ustawienia środowiska tworzenia projektu -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
Powiązania pomiędzy POM-ami
Nie należy mylić dziedziczenia z agregacją - dziedziczenie to mechanizm mający na celu ograniczenie powielania treści POM-ów, podczas gdy agregacja ma na celu modularyzację projektu. Dziedziczenie jest niezależne od podziału projektu na moduły, choć oba mechanizmy bardzo często występują razem. Tworzenie POM-aProgramista może napisać POM-a samodzielnie od podstaw, prościej jednak użyć Mavena, który potrafi wygenerować prostego POM-a samodzielnie: mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app W rezultacie powstanie następujący POM: <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
WtyczkiWiększość funkcji Mavena dostępna jest za pośrednictwem wtyczek. Każda z wtyczek Mavena posiada wyspecyfikowane cele które może realizować. Dany cel może być wywołany używając poniższej składni: mvn [nazwa-wtyczki]:[nazwa-celu] Przykładowo kompilacji kodu można dokonać wywołując Generowanie raportówJedną z funkcji Mavena jest zautomatyzowana generacja strony internetowej projektu. Strona, oprócz ogólnych informacji ustalanych na podstawie POM-a, zawiera również zbiór raportów dokumentujących projekt. W skład raportów wchodzą najczęściej Javadoc, kody źródłowe, PMD. Maven a AntApache Ant jest innym narzędziem na platformę Java automatyzującym proces budowy oprogramowania. Pracując z Antem, programista tworzy skrypt (Buildfile) określający krok po kroku sposób budowy programu. W Mavenie natomiast określa raczej co ma zostać zbudowane i w jaki sposób, niż kiedy i w jakiej kolejności[2]. Kolejność wykonywania poszczególnych faz jest ustalana przez Mavena. Tym samym Maven wydaje się być mniej elastyczny niż Ant. Na korzyść Mavena przemawia fakt, że stworzenie i utrzymanie pliku POM wymaga zwykle znacznie mniej pracy, niż Antowego Buildfile'a. Przypisy
Linki zewnętrzne |