Instalacja
1) Binarka dostępna na stronie Apache.
2) Jeśli korzystasz z Spring STS masz już Mavena w katalogu instalacyjnym Eclipse'a.
Konfiguracja
1) Dodaj 'bin' Maven'a do PATH w systemie operacyjnym i dojdaj zmienna systemowa MAVEN_HOME
n.p.:
Ubuntu: wpisz w linii komend
sudo vi ~/.bashrc
dodaj na końcu pliku wpis:
export MAVEN_HOME=/home/jlong/bin/springsource/maven-2.2.1.RELEASE
export PATH=$PATH:$MAVEN_HOME/bin
Zatwierdź zmiany: ESC i wpisz:
!wq
wciśnij ENTERWindows 7: w Menu start wpisz 'edit system environment variables'
Następnie przycisk Environment Variables i dopisz w zmiennej Path jak na obrazie poniżej
W ten sam sposób musisz mieć ustawioną zmienna JAVA_HOME wskazująca na katalog instalacji JDK, n.p.: W:\tools\java\jdk1.7.0_01
Potem dodaj nowa zmienną systemową MAVEN_HOME przyciskiem 'New...' w sekcji 'System variables'
Sprawdź instalację wpisując w linii komend:
mvn -version
To powinno zwrócić cos w podobie:
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
Maven home: W:\tools\apache-maven-3.0.3\bin\..
Java version: 1.7.0_01, vendor: Oracle Corporation
Java home: W:\tools\java\jdk1.7.0_01\jre
Default locale: en_US, platform encoding: Cp1250
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
Maven tworzy lokalnie na dysku repozytorium bibliotek potrzebnych do pracy.
Domyślnie jest ono składowane w folderze:
/.m2/repository.
Np. pod Windows
C:\Documents and Settings\{user}\.m2\repository
repozytorium może zajmować dużo przestrzeni dyskowej i czasem porządana jest zmiana jego lokalizacji. Można to zrobić w pliku konfiguracyjny Mavena w jego katalogu domowym:
MAVEN_HOME/conf/settings.xml
Należy wpisać:
<localRepository>W:/dev/maven_repo</localRepository>
gdzie podajemy nową lokalizację.
Użycie
Standardowa struktura projektu mvn wygląda tak:
./pom.xml
./src
./src/main
./src/main/java
./src/main/resources
./src/test
./src/test/java
./src/test/resources
POM - Project Object Model, opisuje projekt, zależności, biblioteki używane.
Folder | Wyjaśnienie |
---|---|
src/main/java | kod Java projektu |
src/main/resources | pliki konfiguracyjne dla klas Java, np. Spring context .xml |
src/test/java | kod Java dla testów (np.: JUnit), ten folder nie będzie dołączony w buildzie projektu, jeśli testy nie przejdą build nie będzie zakończony |
src/test/resources | pliki konfiguracyjne dla klas testowych |
Użycie z linii komend:
Stwórz prosty projekt, z linii komend Linux:
mkdir spring-example1;
cd spring-example1;
mkdir -p src/{test,main}/{java,resources}
Stwórz plik pom.xml
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <groupId>com.example.maven</groupId><artifactId>spring-example1</artifactId> <version>1.0-SNAPSHOT</version><name>Simple Project</name></project> |
Simple Project
Wejdź z linii komend do folderu głównego projektu, gdize umieściłeś plik pom.xml i wpisz polecenie:
mvn install
Fazy Maven'a:
Faza | Wyjaśnienie |
---|---|
validate | validuje strukture projektu |
compile | kompiluje kod źródłowy |
test | uruchamia testy |
package | tworzy artifact w katalogu określonym jako 'target' |
integration-test | deploy artifaktu w środowisku integracyjnym |
integration-test | uruchamia walidacje paczki |
install | instaluje paczke w lokalnym repozytorium |
deploy | kopiuje artifact na serwer |
Build Mavena działa wg. w/w faz. Jego wynikiem jest powstanie paczki/artifactu.
Typ artifactu można zmienić przez tag <packaging> (jar, war, ear).
Aby poinstruować Mavena, żeby wyczyścił wszystko co zainstalował w lokalnym repozytorium i jeszcze raz zbudował artifact w folderze 'target' używamy komendy:
mvn clean install
Identyfikacja artifaktów:
Tag | Wyjaśnienie |
---|---|
groupId | może być to cokolwiek, zwykle jest to nazwa pakietu |
artifactId | nazwa artifaktu w ramach tego samego goupId (groupId może być takie samo dla kilku artifaktów które razem tworza jeden system) |
Version | versja artifaktu: numer lub SNAPSHOT, np 1.0-SNAPSHOT, rozumiany jest jako "ostatni build wersji 1.0" |
Zależności w projekcie dodaje się w tagu <dependencies>
<? xml version = "1.0" encoding = "UTF-8" ?> < project xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" > < modelVersion >4.0.0</ modelVersion > < groupId >org.springsource.greenbeans.maven</ groupId > < artifactId >example2</ artifactId > < version >1.0-SNAPSHOT</ version > < name >Our Simple Project</ name > < dependencies > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-context</ artifactId > < version >3.0.5.RELEASE</ version > </ dependency > </ dependencies > </ project > |
Defaultowe ustawienia Mavena modyfikuje sie w tagu <plugins>:
np. aby zmienić wersje kompilatora Java
<? xml version = "1.0" encoding = "UTF-8" ?> < project xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" > < modelVersion >4.0.0</ modelVersion > < groupId >org.springsource.greenbeans.maven</ groupId > < artifactId >example2</ artifactId > < version >1.0-SNAPSHOT</ version > < name >Our Simple Project</ name > < dependencies > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-context</ artifactId > < version >3.0.5.RELEASE</ version > </ dependency > </ dependencies > < build > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-compiler-plugin</ artifactId > < version >2.3.2</ version > < configuration > < source >1.5</ source > < target >1.5</ target > </ configuration > </ plugin > </ plugins > </ build > </ project > |
Pluginy same w sobie często zawieraja zestaw komend które moga być używane niezależnie od projektu i bez budowania projektu. Składnia jest nastepująca:
Plugins usually provide several specific commands that they provide. To invoke a plugin, you use the following form:
mvn [plugin-name]:[command-name]
np. dependency plugin może wypisać drzewo pokazujące zależności w prjekcie. Uzyj komendy:
mvn dependency:tree
Aby skopiować wszystkie zależności potrzebne w projekcie do jednego folderu w target/dependencies użyj komendy:
mvn dependency:copy-dependencies
Użycie z Spring STS:
Zaimportuj stworzony wyżej projekt w Spring STS:
File > Import..
Naspępnie znajdź folder domowy z plikiem pom.xml i Finish
* Jeśli używasz Javy 7 do uruchamienia Spring STS możliwe, że otrzymasz błąd opisany tutaj. Opisany sposób naprawy pomógł. Dodaj wspomniany parametr ("-Djava.util.Arrays.useLegacyMergeSort=true") w pliku STS.ini w folderze sts-x.x.x.RELEASE w zależności od swojej wersji Spring STS (np. sts-2.7.2.RELEASE)
Project Javowy
1. maven-compiler-plugin - kompilowanie Javy
konfiguracja:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable>${JAVA_1_4_HOME}/bin/javac</executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
użycie:
mvn compile
lub żeby skombilować testy:
mvn test-compile
2. exec-maven-plugin - uruchamianie klas Javy
konfiguracja:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.example.App</mainClass>
<arguments>
<argument>arg0</argument>
<argument>arg1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
użycie:
dla fazy nazwanej jak wyżej 'test' uruchamiamy klasę com.example.App poleceniem:
mvn test
Tutaj inne zaawansowane przykłady
Zależności w projektach Maven
Jak stworzyć moduł Maven o groupId=example.group zawierający 2 podrzędne moduły o nazwach example.module1 i example.module2 należące do grupy example.group ?
Oto kroki:
1.
mvn archetype:create -DgroupId=example.group -DartifactId=example.group.core
2.
cd example.group.core
w stworzonym pliku pom.xml zmieniamy typ paczki na
<packaging>pom</packaging>
usuwamy folder src
3.
cd example.group.core
4.
mvn archetype:create -DgroupId=example.group -DartifactId=example.module1
mvn archetype:create -DgroupId=example.group -DartifactId=example.module2
5.
Nowe moduły dodajemy do głównego pom.xml w folderze 'example.group.core'
<modules>
<module>example.module1</module>
<module>example.module2</module>
</modules>
W plikach pom.xml w podmodułach example.module1 i example.module2 dodajemy odniesienie do głównego modułu:
<parent>
<groupId>example.group</groupId>
<artifactId>example.group.core</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
Tak stworzoną strukturę możemy zaimportować jako projekt Maven w Eclipse (jeśli zainstalowaliśmy plugin Mavena)
Możemy też z lini komend zbudować projekt i wygenerować pliki konfiguracyjne Eclipse:
mvn install
mvn eclipse:eclipse
Brak komentarzy:
Prześlij komentarz