Nasz pierwszy moduł utworzymy za pomocą wbudowanego w mavena pluginu archetype.
Tworzymy folder projektu. W moim przypadku będzie to D:\_kurs-mavena\KINO. Wywołujemy konsolę w kontekście tego folderu. Dla systemu windows po prostu wchodzimy do niego i trzymając wciśnięty klawisz Shift, klikamy prawym przyciskiem myszy w wolne miejsce i wybieramy „Otwórz okno polecenia tutaj”. Następnie wpisujemy komendę:
1 |
D:\_kurs-mavena\KINO>mvn archetype:generate |
Maven ściągnie z repozytorium szablony projektów i zaprezentuje je w postaci ponumerowanej listy wyboru.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
D:\_kurs-mavena\KINO>mvn archetype:generate [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: remote -> br.com.ingenieux:elasticbeanstalk-service-webapp-archetype (A Maven Archetype Encompassing RestAssured, Jetty, Jackson, Guice and Jersey for Publishing JAX-RS-based Services on AWS' Elastic Beanstalk Servi 2: remote -> br.gov.frameworkdemoiselle.archetypes:demoiselle-jsf-jpa (Archetype for web applications (JSF + JPA) using Demoiselle Framework) 3: remote -> br.gov.frameworkdemoiselle.archetypes:demoiselle-minimal (Basic archetype for generic applications using Demoiselle Framework) 4: remote -> br.gov.frameworkdemoiselle.archetypes:demoiselle-vaadin-jpa (Archetype for Vaadin web applications) 5: remote -> co.ntier:spring-mvc-archetype (An extremely simple Spring MVC archetype, configured with NO XML.) 6: remote -> com.abiquo:storage-plugin-archetype (-) 7: remote -> com.agilejava.docbkx:docbkx-quickstart-archetype (-) 8: remote -> com.airhacks:igniter (An application template for building Java FX MVP applications with Dependency Injection and afterburner.fx) 9: remote -> com.airhacks:javaee7-essentials-archetype (Java EE 7 project template. Clean, lean and minimalistic.) 10: remote -> com.alibaba.citrus.sample:archetype-webx-quickstart (-) 11: remote -> com.astamuse:asta4d-archetype (an archetype that is automatically created from asta4d-sample.) 12: remote -> com.atolcd.alfresco:repo-archetype (Alfresco repository module archetype) 13: remote -> com.atolcd.alfresco:share-archetype (Alfresco Share module archetype) 14: remote -> com.bsb.common.vaadin:com.bsb.common.vaadin.embed-simple-archetype (-) 15: remote -> com.bsb.common.vaadin:com.bsb.common.vaadin7.embed-simple-archetype (-) 16: remote -> com.cedarsoft.open.archetype:multi (-) 17: remote -> com.cedarsoft.open.archetype:simple (-) 18: remote -> com.cloudfoundry.tothought:spring-data-basic (A basic setup for Spring Data + Hibernate + MySql) [...] 907: remote -> pro.savant.circumflex:webapp-archetype (-) 908: remote -> ru.circumflex:circumflex-archetype (-) 909: remote -> ru.nikitav.android.archetypes:release (-) 910: remote -> ru.nikitav.android.archetypes:release-robolectric (-) 911: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-) 912: remote -> sk.seges.sesam:sesam-annotation-archetype (-) 913: remote -> tk.skuro:clojure-maven-archetype (A simple Maven archetype for Clojure) 914: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): |
chcemy stworzyć moduł, który będzie budowany jako webaplikacja do pliku .war więc wybieramy przykładowo org.codehaus.mojo.archetypes:webapp-javaee6. W moim przypadku będzie to numer 558. (Wpisując zamiast liczby dowolną frazę ograniczymy listę szablonów do takich zawierających naszą frazę).
1 2 3 4 5 6 7 8 9 10 11 |
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 558 Choose org.codehaus.mojo.archetypes:webapp-javaee6 version: 1: 1.0 2: 1.0.1 3: 1.0.2 4: 1.1 5: 1.2 6: 1.3 7: 1.4 8: 1.5 Choose a number: 8: |
wybieram najnowszą wersję: 8
Maven pobierze potrzebne biblioteki i poprosi o podanie niezbędnych atrybutów do utworzenia projektu:
- groupId – unikalne id grupy modułów projektu: pl.ekaczynski.kino
- artifactId – unikalne id artefaktu (modułu) w obrębie projektu: kino-client
- version – wersja projektu: 1.0.0
- package – główna paczka dla naszego modułu: pl.ekaczynski.kino.client
Wynik działania powinien być taki jak poniżej:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: webapp-javaee6:1.5 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: pl.ekaczynski.kino [INFO] Parameter: artifactId, Value: kino-client [INFO] Parameter: version, Value: 1.0.0 [INFO] Parameter: package, Value: pl.ekaczynski.kino.client [INFO] Parameter: packageInPathFormat, Value: pl/ekaczynski/kino/client [INFO] Parameter: package, Value: pl.ekaczynski.kino.client [INFO] Parameter: version, Value: 1.0.0 [INFO] Parameter: groupId, Value: pl.ekaczynski.kino [INFO] Parameter: artifactId, Value: entities [INFO] project created from Archetype in dir: D:\_kurs-mavena\KINO\kino-client [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 34:14.887s [INFO] Finished at: Tue Feb 11 00:14:36 CET 2014 [INFO] Final Memory: 8M/21M [INFO] ------------------------------------------------------------------------ |
A w folderze projektu zostanie utworzony artefakt o następującej strukturze:
1 2 3 4 5 6 7 8 9 10 11 |
kino-client ----| src --------| main ------------| java ----------------| pl --------------------| ekaczynski ------------------------| kino ----------------------------| client ------------| webapp ----------------| index.jsp ----| pom.xml |
Maven utworzył dla nas podstawową strukturę dla projektu webowego. Aby się przekonać, że wszystko zostało ustawione poprawnie zbudujemy projekt. W tym celu użyjemy komendy
1 |
mvn clean install |
wewnątrz naszego modułu kino-client, której zadaniem jest skasowanie poprzednio zbudowanej wersji i zbudowanie nowej. Co prawda to trochę pobieżne podejście bo po drodze dzieje się również kilka innych rzeczy ale tym zajmiemy się później.
Po kilku chwilach powinniśmy otrzymać komunikat sukcesu budowania projektu:
1 2 3 4 5 6 7 8 9 |
[INFO] Installing D:\_kurs-mavena\KINO\kino-client\target\kino-client-1.0.0.war to C:\Users\YaQzi\.m2\repository\pl\ekaczynski\kino\kino-client\1.0.0\kino-client-1.0.0.war [INFO] Installing D:\_kurs-mavena\KINO\kino-client\pom.xml to C:\Users\YaQzi\.m2\repository\pl\ekaczynski\kino\kino-client\1.0.0\kino-client-1.0.0.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 5.070s [INFO] Finished at: Tue Feb 11 01:28:34 CET 2014 [INFO] Final Memory: 7M/17M [INFO] ------------------------------------------------------------------------ |
W linii 1 widzimy, że zbudowany został plik .war, który można już zainstalować na serwerze javowskim, np Tomcat. Linia 2 z kolei mówi nam, że nasz artefakt trafił również do naszego repozytorium lokalnego.
Kurs Maven’a [cz.01] – wstęp
Kurs Maven’a [cz.02] – od czego zacząć
Kurs Maven’a [cz.03] – do czego ten maven
Kurs Maven’a [cz.04] – zależności
Kurs Maven’a [cz.05] – instalacja
> Kurs Maven’a [cz.06] – tworzenie modułu, archetyp
Kurs Maven’a [cz.07] – tworzenie modułu, kopiowanie
Kurs Maven’a [cz.08] – tworzenie modułu ręcznie
Kurs Maven’a [cz.09] – parent pom
Kurs Maven’a [cz.10] – import do Eclipsa
Kurs Maven’a [cz.11] – zależności zewnętrzne
Kurs Maven’a [cz.12] – zależności wewnętrzne
Kurs Maven’a [cz.13] – scope, exclusion
Kurs Maven’a [cz.14] – parametry (properties)
Kurs Maven’a [cz.15] – profile
Kurs Maven’a [cz.16] – cykl życia
Kurs Maven’a [cz.17] – pluginy
Kurs Maven’a [cz.18] – repozytoria zdalne
Kurs Maven’a [cz.19] – podsumowanie