wtorek, 22 listopada 2011

Maven na szybko

Szybki zbiór informacji pomocnych by szybko zacząć pracę z Mavenem.

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 ENTER

Windows 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.























FolderWyjaśnienie
src/main/javakod Java projektu
src/main/resourcespliki konfiguracyjne dla klas Java, np. Spring context .xml
src/test/javakod 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/resourcespliki 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">
<modelVersion>4.0.0</modelVersion>
<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:







































FazaWyjaśnienie
validatevaliduje strukture projektu
compilekompiluje kod źródłowy
testuruchamia testy
packagetworzy artifact w katalogu określonym jako 'target'
integration-testdeploy artifaktu w środowisku integracyjnym
integration-testuruchamia walidacje paczki
installinstaluje paczke w lokalnym repozytorium
deploykopiuje 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:



















TagWyjaśnienie
groupIdmoże być to cokolwiek, zwykle jest to nazwa pakietu
artifactIdnazwa artifaktu w ramach tego samego goupId (groupId może być takie samo dla kilku artifaktów które razem tworza jeden system)
Versionversja 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"?>


  <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"?>


  <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:

Publikowanie komentarza