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.
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] ----------------------------------------------------
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.
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/
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
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:
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:
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:
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:
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.
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.
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:
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 |
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.