Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 

Maven, nicht nur für große Projekte

Nervt es bei jedem neuen Projekt die immer wieder (gleichen) Biblitoheken zusammen zu suchen und in das Projekt einzubinden?

Maven kann helfen.

Im folgenden wird außer der eigentlichen Maven Installation, noch zwei unterschiedliche Möglichkeiten für die Nutzung in Eclipse Projekten gezeigt. Ich empfehle beide zu lesen, da ich im Normalfall z.B. beiden Vorgehnsweisen parallel einsetze.

Maven installieren

Für diesen Text habe ich Version 2.0.7 genutzt: http://maven.apache.org/download.html

Einfach das herruntergeladene Zip-file entpacken und am besten in den Umgebungsvariaben von Windows das bin Verzeichnis zum Path hinzufügen. 1)

Danach sollte ein Aufruf von mvn in der Konsole sollte nun funktionieren:

w:\Programme\Launch Manager>mvn
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ----------------------------------------------------
[INFO] You must specify at least one goal. Try 'install'
[INFO] ----------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ----------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Fri Oct 26 22:59:03 CEST 2007
[INFO] Final Memory: 1M/4M
[INFO] ----------------------------------------------------

Maven konfigurieren

Eigentlich muss nichts konfiguriert werden, ich würde aber trotzdem empfehlen die settings.xml welche im conf Verzeichnis der Maven Installation liegt etwas anpassen. Genauer gesagt die Position des Lokalen Repositories hätte ich ungerne im Profile Ordner von Windows.

Hierzu in der {maven.home}/conf/settings.xml den <localRepository> Tag einkommentieren und ein gewünschtes Verzeichnis eintragen:

<localRepository>W:\Develop\Repositories\maven</localRepository>
Anmerkung:
Das im folgenden beschriebene m2eclipse Plugin scheint diese Einstellung zu ignorieren! Evtl. hab ich da auch was übersehen, aber wie weiter unten sieht, nutze ich diesen Part normalerweise eh nicht.

In Eclipse integrieren - Methode I

Da wir, als Eclipse Nutzer, von einer IDE mehr als nur einen guten Debugger erwarten, möchten wir natürlich auch bei Maven eine Integration nicht missen.

Das m2eclipse Plugin das uns genau das liefert gibt es auf http://m2eclipse.codehaus.org/ bzw. die zugehörige Update Site:

http://m2eclipse.codehaus.org/update/

Maven in einem Eclipse Projekt einsetzen

Wir nehmen an es gibt schon ein Java Projekt für das wir Maven nutzen möchten. Um dies zu erreichen können wir einfach auf dem Projekt direkt Maven aktivieren: Maven\Enable Dependency Management

:tutorial:java:firstmaven:maven_01.png

Wenn das Projekt bisher noch kein Maven eingesetzt hat. Genauer gesagt, es gibt im Projekt-Root noch keine pom.xml. Dann sollte ein kleiner Dialog aufgehen:

:tutorial:java:firstmaven:maven_02.png

Nun kann man eigentlich schon auf Finish klicken, wir gehen hier aber weiter per Next. Denn als nächstes können wir so gleich Bibliotheken zu unserem Projekt hinzufügen. Wie nicht anders zu erwarten war ist Liste der bisher konfigurierten Abhängigkeiten natürlich noch leer:

:tutorial:java:firstmaven:maven_03.png

Daher fügen wir nun über Add ein weitere Bibliothek hinzu. Den folgenden Dialog findet man später auch über das Kontext Menü unter Maven\Add Dependency wieder.

Als Beispiel fügen wir nun die xStream Bibliothek hinzu. Hierzu kann man im Feld Query einfach “xstream” eingeben und Maven liefert einer Liste der verfügbaren Bibliotheken mit diesem Namen:

:tutorial:java:firstmaven:maven_04.png

Nun können wir die gewünschte Bibliothek & Version auswählen. Wer gerade eine Konsole auf hat, wird nach einem Klick auf Finish auch sehen wie Maven anfängt Dateien aus dem Netz zu ziehen. Nach einiger Zeit bekommt das Projekt die geraden angegebenen Bibliotheken mit eingebunden:

:tutorial:java:firstmaven:maven_05.png

Anscheinend hat xStream eine Abhängikeit zu xpp3_min, wesswegen Maven uns diese Bibliothek auch gleich mit hinzugefügt hat. Denn Maven kenn auch die Abhänigkeiten der einzelnen Bibliotheken und löst diese gleich mit auf.

Damit war es das auch schon, wir können xStream im Projekt nutzen. Das lästige manuelle suchen & herrunterladen von Bibliotheken können wir uns sparen, das macht nun Maven für uns. Außerdem können wir die pom.xml die nun im Root des Projektes liegt über die Sourceverwaltung an andere Mitarbeiter verteilen.

In Eclipse integrieren - Methode II

Wie man oben sieht, bindet m2Eclipse die Bibliothek direkt über den Kompletten Pfad ein. Alternativ kann man auch mit einem Plugin das direkt für Maven Verfügbar ist, Bibotheken relativ zu einer M2_REPO Variablen ablegen. Dies ist meiner Ansicht nach etwas sauberer, allerdings muss hier einmal manuell eine M2_REPO Variable im Workspace gesetzt werden.

Außerdem beachtet das Maven-Eclipse Plugin auch die Änderung des lokalen Repositories welche wir oben in der {maven.home}\conf\settings.xml gemacht haben.

Plugin Hompage: http://maven.apache.org/plugins/maven-eclipse-plugin/

Würde man das Maven-Eclipse Plugin einsetzen, so ist das m2eclipse Plugin für Eclipse nichtmehr nötig. Es reicht also wenn man Maven installiert und das bin Verzeichnis von Maven in den Suchpfad einträgt.

In diesem Fall würde man die pom.xml meist manuell im Projekt-Root erzeugen:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.elaunch</groupId>
  <artifactId>com.example.elaunch</artifactId>
  <version>0.0.1</version>
</project>

Natürlich kann man nun manuell die <dependecies> eintragen. Aber da eh schon das m2eclipse Plugin installiert ist, können wird dies natürlich auch dafür nutzen. Auch wenn das Projekt nicht als Maven Projekt markiert wurde, so können wir trotzdem für die pom.xml über das Kontextmenü Maven\Add Dependency ganz einfach Biblitheken suchen und hinzufügen.

Haben wir das getan, sollte die pom.xml wie folgt aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.elaunch</groupId>
  <artifactId>com.example.elaunch</artifactId>
  <version>0.0.1</version>
  <dependencies>
    <dependency>
      <groupId>xstream</groupId>
      <artifactId>xstream</artifactId>
      <version>1.2.2</version>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>${basedir}/src</sourceDirectory>
    <testSourceDirectory>${basedir}/test</testSourceDirectory>
  </build>
</project>

Bei jeder Änderung an der pom.xml sollten wir nun Maven aufrufen, damit die fehlenden Bibiotheken nachgezogen werden und damit das Eclipse Projekt geupdated wird. Dies erreichen wir ganz einfach über die Eingabe des folgenden Kommandos in einer Konsole die im Projekt-Root geöffnet ist.

mvn eclipse:eclipse

Nach einem Refresh des Workspaces kann man sehen wie die xStream Bibliothek in das Eclipse Projekt Eingebaut wurde. Wie schon erwähnt erfolgt dies nicht über den absoluten Pfad, sondern über eine Eclipse Variable M2_REPO.

Diese kann im Eclipse Workspace unter “Windows\Preferences\Java\Build Path\Classpath Variables” gesetzt werden.

In meinem Fall wäre der Pfad durch die Manipulation der {mave.home}\conf\settings.xml weiter oben W:\Develop\Repositories\maven. Wenn dies nicht geändert wurde liegt das Repository normalerweise im Beutzerverzeichnis unter ~\.m2\reposiory.

Automatisierung

Selbst wenn man den Tipp von pro-pix.de gelesen hat, so ist das nutzen einer Shell doch immer etwas langweiliges.

Aber genau hierfür kann man in Eclipse External Tools konfigurieren:

:tutorial:java:firstmaven:maven_06.png

Als ganz einfaches Programm können wir nun obrige mvn eclipse:eclipse Zeile wie folgt definieren:

Location ${system_path:mvn.bat}
Working Directory ${project_loc}
Arguments eclipse:eclipse

:tutorial:java:firstmaven:maven_07.png

Repositories / Sonstiges

Wir haben kurz gesehen, dass Maven wohl Repositories nutzt, so gibt es offensichtlich ein lokales Repositories in welchem alle irgendwie gebrauchen Bibliotheken liegen. Das ‘offizielle’ Maven Repositoriy wo wir nun die xStream Lib gezogen habe, enthälter allerdings nur Freie Bibliothken. So können z.B. Firmen eigene firmenweite Repositories haben, welche dem globalen vorgeschaltet werden. Dadurch können so auch ‘non-free’ bibliotheken über Maven verwaltet werden. Außerdem können natürlich auch selber ezeugte Bibliotheken so innerhalb einer Firma ‘geshared’ werden.

Maven kann übrigens durch Plugins erweitert werden welche noch wesentlich mehr können als nur Bibliotheken zu verwalten.

1) Systemsterung/System/Erweitert/Umgebungsvariabeln Path=[...]Altes Zeugs[...];W:\Develop\bin\maven\bin;
 
tutorial/java/firstmaven.txt · Last modified: 2007/12/02 14:58 by rainerw
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki