Maven ist (wie Ant) ein leistungsfähiges Werkzeug, um viele in der Softwareentwicklung immer wieder anfallende Prozeduren zu automatisieren und zu vereinfachen.
Während Ant eher kommandoorientiert arbeitet, ist Maven eher strategisch orientiert, realisiert mehr Abstraktionen, wird deklarativer gesteuert, berücksichtigt Abhängigkeiten besser und ist besonders für aufwändigere Multiprojekte geeignet.
Im Folgenden wird nur auf Maven 1.x eingegangen. Für Neuentwicklungen sollte nicht diese Version, sondern stattdessen unbedingt Maven 2.x eingesetzt werden, da diese Version viele entscheidende Vorteile bietet (z.B. eigenständige Auflösung von transitiven Abhängigkeiten).
Informationen und eine Einführung zu Maven 2.x finden Sie in maven.htm.
Sowohl Ant als auch Maven sind leistungsfähige Werkzeuge, um viele in der Softwareentwicklung immer wieder anfallende Prozeduren zu automatisieren und zu vereinfachen. Beide haben ihre bevorzugten Einsatzbereiche.
Vorteile von Ant:
Vorteile von Maven:
Falls Sie Ant bereits kennen und Maven kennenlernen wollen, wird Sie Maven for Ant Users und Migrating from Ant interessieren.
Setzen Sie folgende Umgebungsvariablen (Environment-Variablen)
(passen Sie die Pfadangaben an Ihre Java- und Maven-Verzeichnisse an)
(unter Windows XP: 'WindowsTaste + PauseTaste' | 'Erweitert' | 'Umgebungsvariablen';
unter Linux: siehe linux.htm#Umgebungsvariablen):
| Benutzervariablen setzen: | |
| JAVA_HOME | C:\Program Files\Java\jdk1.6 |
| MAVEN_HOME | C:\Java\Maven-1.0.2 |
| Systemvariable erweitern um: | |
| Path | <vorherigerPath>;C:\Program Files\Java\jdk1.6\bin;C:\Java\Maven-1.0.2\bin |
Falls Sie Eclipse einsetzen,
müssen Sie den Eclipse-Classpath erweitern um den Maven-Repository-Pfad 'MAVEN_REPO'
('%MAVEN_HOME_LOCAL%/repository').
Dies geht am einfachsten über das Maven-Goal
'eclipse:add-maven-repo'
über folgenden Kommandozeilenbefehl (bitte Eclipse-Workspace-Pfad anpassen):
maven -Dmaven.eclipse.workspace=D:\MeinWorkspace eclipse:add-maven-repo
Alternativ können Sie in Eclipse über 'Window' | 'Preferences' | '[+] Java' | '[+] Build Path' | 'Classpath' eingeben (bitte Pfad anpassen):
| Eclipse-Classpath: | |
| MAVEN_REPO | C:\Dokumente und Einstellungen\<BenutzerName>\.maven\repository |
Unterstützung zur Anlage eines Projekts bietet das 'genapp'-Plug-in, siehe Maven Application Generator Plug-in. Im Folgenden wird jedoch von Hand vorgegangen.
Legen Sie eine Verzeichnisstruktur an. Um so näher Sie sich an die Maven Standard Directory Structure halten, um so einfacher wird die Konfiguration. Zum Beispiel so:
[\MeinWorkspace]
'- [MeinProjekt]
|- [src]
| |- [main]
| | |- [java]
| | | '- [meinpackage]
| | | '- MeineKlasse.java
| | '- [resources]
| '- [test]
| |- [java]
| | '- [meinpackage]
| | '- MeineKlasseTest.java
| '- [resources]
'- [xdocs]
Legen Sie im Projektverzeichnis (im Beispiel: 'D:\MeinWorkspace\MeinProjekt') eine leere 'LICENSE.txt' an, sonst beschweren sich einige Maven-Plug-ins.
Legen Sie im Projektverzeichnis 'D:\MeinWorkspace\MeinProjekt' den 'Maven Project Descriptor' 'project.xml' an, zum Beispiel so:
<project>
<groupId>MeinProjektgruppenKurzname</groupId>
<artifactId>MeinProjektKurzname</artifactId>
<currentVersion>1.0</currentVersion>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<unitTest>
<includes>
<include>**/*Test.java</include>
</includes>
</unitTest>
</build>
</project>
Direkt unter '<project ...>' werden allgemeine Projekteigenschaften definiert.
Unter '<dependencies ...>' werden Module definiert, von denen das Projekt abhängig ist
(die hier eingetragene 'log4j'-Abhängigkeit wird eigentlich nicht benbötigt,
sie dient nur der Veranschaulichung).
Unter '<build ...>' werden Vorgaben für zur Erzeugung der Projektergebnisse zu verwendender Quelldateien definiert, wie Pfade und Dateinamensmuster.
Weiteres hierzu finden Sie weiter unten unter project.xml.
Steuern Sie das Verhalten der Maven Plug-ins über Attribute in der 'project.properties' im Projektverzeichnis 'D:\MeinWorkspace\MeinProjekt', zum Beispiel so:
maven.compile.debug=true maven.compile.fork=yes maven.compile.source=1.4 maven.compile.target=1.4
Die möglichen Properties der einzelnen Maven-Plug-ins und Erklärungen dazu finden Sie über die weiter unten unter Plug-ins, Properties und Goals genannten Verweise.
Außer in der 'project.properties'-Datei können auch in weiteren Dateien Properties gesetzt werden, siehe unten.
Legen Sie unter 'main' Ihre Java-Klassen an. Als einfaches Beispiel speichern Sie im Unterverzeichnis 'D:\MeinWorkspace\MeinProjekt\src\main\java\meinpackage' die folgende Java-Datei 'MeineKlasse.java':
package meinpackage;
public class MeineKlasse
{
private String job;
public String getJob() {
return job;
}
public void setJob( String job ) {
this.job = job;
}
public double myMethod( double x ) throws Exception
{
if( "Quadrat".equalsIgnoreCase( job ) )
return x * x;
if( "Wurzel".equalsIgnoreCase( job ) )
return Math.sqrt( x );
throw new Exception( "Fehler: Aufgabe nicht korrekt definiert." );
}
}
Wir wollen auch sofort unter 'test' einen JUnit-Test hinzufügen. Speichern Sie im Unterverzeichnis 'D:\MeinWorkspace\MeinProjekt\src\test\java\meinpackage' die folgende Testdatei 'MeineKlasseTest.java':
package meinpackage;
import junit.framework.TestCase;
public class MeineKlasseTest extends TestCase
{
MeineKlasse meineKlasse1;
public void setUp() throws Exception
{
meineKlasse1 = new MeineKlasse();
assertEquals( "Anfangs darf kein Job gesetzt sein.",
null, meineKlasse1.getJob() );
}
public void tearDown() throws Exception
{
meineKlasse1 = null;
}
public void testGetAndSetJob()
{
meineKlasse1.setJob( "Quadrat" );
assertEquals( "Job muss 'Quadrat' sein.",
"Quadrat", meineKlasse1.getJob() );
}
public void testDoJobs() throws Exception
{
meineKlasse1.setJob( "Quadrat" );
assertTrue( "Quadrat von '4' muss '16' sein.",
16. == meineKlasse1.myMethod( 4 ) );
meineKlasse1.setJob( "Wurzel" );
assertTrue( "Wurzel von '4' muss '2' sein.",
2. == meineKlasse1.myMethod( 4 ) );
meineKlasse1.setJob( null );
try {
meineKlasse1.myMethod( 4 );
fail( "Exception muss geworfen werden, da kein korrekter Job gesetzt." );
} catch( Exception ex ) {}
}
}
Speichern Sie im Unterverzeichnis 'D:\MeinWorkspace\MeinProjekt\xdocs' die folgende Dokumentationsdatei 'index.xml':
<document>
<properties>
<title>Mein erstes Maven-Projekt</title>
<author email="MeinName@MeineFirma.de">MeinName</author>
</properties>
<body>
<section name="Meine erste Überschrift">
<p> Mein erster Text </p>
</section>
<section name="Meine zweite Überschrift">
<p> Mein zweiter Text </p>
</section>
</body>
</document>
Öffnen Sie ein Kommandozeilenfenster und geben Sie die folgenden Kommandos ein (passen Sie den Pfad an):
cd \Java\MeinProjekt
maven clean
maven java:compile
maven test
maven jar
maven site
Zumindest beim ersten Mal wird eine aktive Internetverbindung benötigt, weil Maven für das Projekt benötigte Plug-ins und Module nachlädt ("Plugin cache will be regenerated", z.B. für 'commons-jelly-....jar', 'commons-lang-2.0.jar', 'antlr-2.7.2.jar', 'junit-3.8.1.jar', 'xml-apis-1.0.b2.jar', 'xerces-2.4.0.jar', ...).
Anschließend ist die Verzeichnisstruktur folgendermaßen erweitert:
[\MeinWorkspace]
'- [MeinProjekt]
|- [src]
| |- [main]
| | |- [java]
| | | '- [meinpackage]
| | | '- MeineKlasse.java
| | '- [resources]
| '- [test]
| |- [java]
| | '- [meinpackage]
| | '- MeineKlasseTest.java
| '- [resources]
|- [target]
| |- [classes]
| | '- [meinpackage]
| | '- MeineKlasse.class
| |- [docs]
| | |- index.html
| | |- ...
| |- [test-classes]
| | '- [meinpackage]
| | '- MeineKlasseTest.class
| |- [test-reports]
| | |- TEST-meinpackage.MeineKlasseTest.txt
| | '- TEST-meinpackage.MeineKlasseTest.xml
| |- MeinProjektKurzname-1.0.jar
| |- ...
|- [xdocs]
| '- index.xml
|- LICENSE.txt
|- project.properties
'- project.xml
'maven clean' löscht alle Ergebnisse durch Löschen des kompletten 'target'-Verzeichnisses.
'maven java:compile' compiliert 'MeineKlasse.java' zu 'MeineKlasse.class'.
'maven test' compiliert 'MeineKlasseTest.java' zu 'MeineKlasseTest.class' und führt den JUnit-Test aus. Das Ergebnis finden Sie in 'target\test-reports\TEST-meinpackage.MeineKlasseTest.txt'.
'maven jar' erzeugt 'MeinProjektKurzname-1.0.jar' (der Name wird in der 'project.xml' definiert, siehe oben).
'maven site' erzeugt viele Dokumentationsdateien. Die Zusammenstellung der Ergebnisse finden Sie in 'target\docs\index.html'. Öffnen Sie diese Datei im Webbrowser. Klicken Sie im 'Project Documentation'-Fenster auf 'Project Info' und 'Project Reports' und sehen Sie sich die erstellten Berichte an:
| Project Info | |
| Dependencies | Liste der Abhängigkeiten |
| Project Reports | |
| Checkstyle | Checkstyle Analyse der Coding Rules |
| PMD Report | Code Analyse |
| JCoverage | Testabdeckung |
| Unit Tests | Ergebnisse der JUnit-Tests |
| JavaDocs | Die für das Projekt erzeugten Javadocs |
| Metrics | JDepend Metric Analyse |
Natürlich müssten einige der Berichterstellungsprogramme (insbesondere 'Checkstyle') zuerst an die eigenen Vorgaben angepasst werden (z.B. an die eigenen Java Coding Conventions).
Bei den Kommandozeilenkommandos sind oben zur Veranschaulichung mehrere Einzel-"Goals" aufgerufen, was oft nicht notwendig ist. Zum Beispiel das genannte 'maven jar' ruft die Goals 'java:compile' und 'test' implizit auf. Dies hat zur Folge, dass bei fehlgeschlagenen JUnit-Tests auch keine .jar-Datei erstellt wird. Will man diese in jedem Fall erhalten, kann man mit folgenden Kommandos entweder trotz Fehler fortfahren oder die Tests komplett überspringen:
maven -Dmaven.test.failure.ignore=true jar
maven -Dmaven.test.skip=true jar
| Kommando | Bedeutung | Erklärung |
|---|---|---|
| maven -h | Help | Hilfe zu den Kommandozeilenoptionen von Maven |
| maven -u | Usage | Projektspezifische Hilfe und projektspezifische Goals (falls in 'maven.xml' vorgesehen) |
| maven -g | Goals | Generell zur Verfügung stehende Goals |
| maven -P | Plug-ins | Alle zur Verfügung stehende Plug-ins |
| maven -P ... | Plug-in ... | Goals eines einzelnen Plug-ins, z.B.: maven -P jar |
| maven -D... | Define arg ... | Definiert Property für Ausführung des Goals, z.B.: maven -Dmaven.test.skip=true jar |
| maven -X ... | Debug | Produziert zusätzliche Meldetexte während der Ausführung |
Weitere Hilfe finden Sie unter Command Line Reference und unter den unten genannten Links.
Informationen zu Maven-Plug-ins finden Sie unter:
http://maven.apache.org/reference/plugins und
http://maven-plugins.sourceforge.net/projects-overview.html.
Es folgt eine kleine Auswahl daraus:
| Plug-in | Properties | Goals | Erklärung |
|---|---|---|---|
| Eclipse | maven.eclipse.workspace |
eclipse eclipse:external-tools eclipse:add-maven-repo |
Generiert Eclipse-'.project' und -'.classpath'-Dateien Generiert Einträge in 'externaltools.xml' Setzt in Eclipse die Classpath-Variable 'MAVEN_REPO' |
| Clean | clean | Löscht Ergebnisse durch Löschen des 'target'-Verzeichnisses | |
| Java |
maven.compile.compilerargs maven.compile.debug maven.compile.fork maven.compile.source maven.compile.target maven.build.dest maven.dependency.classpath |
java:compile | Compiliert die Java-Sourcen |
| Test |
maven.junit.fork maven.test.skip maven.test.failure.ignore maven.tomcat.home |
test | Startet die JUnit-Tests |
| Jar |
maven.jar.final.name maven.jar.excludes maven.jar.includes maven.jar.mainclass maven.repo.local maven.repo.central maven.repo.central.directory maven.username |
jar jar:install jar:deploy |
Erzeugt .jar-Datei Installiert die .jar-Datei in das lokale Maven-Repository Deployt in das zentrale Maven-Repository |
| War |
maven.war.src maven.war.final.name |
war war:inplace |
Erzeugt .war-Dateien für Web-Applikationen Erzeugt Webanwendungsverzeichnis zur Einbindung im App-Server |
| Ear | maven.ear.final.name |
ear ear:install ear:deploy |
Erzeugt .ear-Datei Installiert die .ear-Datei in das lokale Maven-Repository Deployt in das zentrale Maven-Repository |
| EJB |
maven.ejb.includes maven.ejb.excludes maven.ejb.client.generate |
ejb ejb:install ejb:deploy |
EJB-Jar-Datei (plus event. EJB-Client) erzeugen Installiert EJB ins lokale Maven-Repository Deployt EJB in das zentrale Maven-Repository |
| Site |
maven.site.deploy.method maven.scp.executable maven.ssh.executable |
site site:deploy |
Erzeugt viele Berichte (in HTML) Kopiert die HTML-Seiten z.B. zu einem Webserver |
| Multi-Project | maven.multiproject... | multiproject:... | Multi-Project-Bearbeitung |
| SCM |
maven.scm.username maven.scm.password |
scm:checkout scm:update scm:tag |
Source Control Management, z.B. CVS und Subversion |
Beachten Sie, dass außer in der 'project.properties'-Datei auch in weiteren Dateien und per Kommandozeile ('-D...') Properties gesetzt werden können, siehe unten.
Im Folgenden werden diese Abkürzungen verwendet:
'${basedir}' ist das '<ProjektVerzeichnis>',
z.B. 'D:\MeinWorkspace\MeinProjekt';
'${user.home}' ist das Benutzerverzeichnis,
z.B. 'C:\Dokumente und Einstellungen\<MeinName>'
Maven wird über drei Arten von Steuerdateien gesteuert:
| Steuerdatei-Art | Verwendung |
|---|---|
| ${basedir}/project.properties (und diverse weitere Properties- Einstellmöglichkeiten, siehe unten) |
Properties (Eigenschaften), z.B. zur Steuerung der Plug-ins, Beispiele siehe oben und hier |
| ${basedir}/project.xml | 'Project Descriptor' zur Definition des 'POM' (Project Object Model), Beispiele siehe oben und hier |
| ${basedir}/maven.xml | Definition eigener Goals (mit Jelly), Beispiele siehe unten, hier und hier |
Über Properties (Attribute, Eigenschaften) in der 'project.properties' und an anderen Stellen wird das Verhalten der Maven Plug-ins gesteuert. Die möglichen Properties der einzelnen Maven-Plug-ins und Erklärungen dazu finden Sie über die oben unter Plug-ins, Properties und Goals genannten Verweise.
Ein Beispiel einer 'project.properties' ist oben gezeigt. Ein anderes Beispiel finden Sie hier.
'Properties' können an verschiedenen Stellen definiert werden, nämlich folgendermaßen (mit aufsteigender Priorität):
| Quelle | Bedeutung |
|---|---|
| Built-in Properties, z.B.: defaults.properties, plugin.properties |
Built-in Properties von Maven und den Plug-ins |
| ${basedir}/project.properties | Projektspezifische, aber für alle Anwender gleiche Einstellungen; Wird ins CVS bzw. SVN eingecheckt; Beispiel siehe oben |
| ${basedir}/build.properties | Projektspezifische und benutzerabhängige Einstellungen; Wird nicht eingecheckt; Häufig wird hierfür 'build.properties.sample' als Template vorgesehen |
| ${user.home}/build.properties | Für alle Projekte dieses Benutzers geltende benutzerabhängige Einstellungen; Z.B. remote Repository URL, Proxy-Einstellungen, Dateipfade |
| System-Environment-Variablen ('set ...=...') | Für alle Projekte dieses Benutzers geltende benutzerabhängige Einstellungen |
| Kommandozeile ('-D...') | Temporäre Einstellung für ein einzelnes Kommando |
Einige wichtige zentrale 'Properties' (Genaueres siehe Properties Reference und Using Repositories):
| Property | Default-Wert | Bedeutung |
|---|---|---|
| maven.repo.remote | http://www.ibiblio.org/maven | Remote online Repository für Artefakte |
| maven.plugin.dir | ${maven.home}/plugins | Remote Plug-ins-Verzeichnis |
| maven.home.local | ${user.home}/.maven | Lokales Basisverzeichnis für das Plug-ins- und Artifakte-Verzeichnis |
| maven.plugin.unpacked.dir | ${maven.home.local}/plugins | Lokales Plug-ins-Verzeichnis |
| maven.repo.local | ${maven.home.local}/repository | Lokales Verzeichnis für Artifakte wie z.B. .jar-Dateien |
Weiter unten wird gezeigt, wie diese und andere Properties leicht angezeigt werden können.
Im Projektbasisverzeichnis ('${basedir}', z.B. 'D:\MeinWorkspace\MeinProjekt') wird in der 'Project Descriptor'-Datei 'project.xml' das so genannte 'POM' (Project Object Model) definiert.
Ein Beispiel einer 'project.xml' ist oben gezeigt und ein anderes Beispiel gibt es hier.
Die wichtigsten darin enthaltenen Blöcke sind '<project ...>', '<dependencies ...>' und '<build ...>':
<project>
...
<dependencies>
...
</dependencies>
<build>
...
</build>
</project>
Direkt unter '<project ...>' werden allgemeine Projekteigenschaften definiert.
Unter '<dependencies ...>' werden Module definiert, von denen das Projekt abhängig ist.
Unter '<build ...>' werden Vorgaben für zur Erzeugung der Projektergebnisse zu verwendender Quelldateien definiert, wie Pfade und Dateinamensmuster.
Außer den genannten gibt es (optional) noch viele weitere Informationsblöcke, wie zum Beispiel 'developers'.
Folgendermaßen kann zum Beispiel die SCM-Verbindung zu einem CVS-Server konfiguriert werden:
<repository>
<url>
http://cvs.apache.org/viewcvs.cgi/jakarta-cactus/
</url>
<connection>
scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-cactus
</connection>
<developerConnection>
scm:cvs:ext:MeinName@MeinHost:/cvs/root:MeinModul
</developerConnection>
</repository>
Und so für einen Subversion-Server:
<repository>
<url>
http://svn.apache.org/repos/asf/struts/core/trunk
</url>
<connection>
scm:svn:http://svn.apache.org/repos/asf/struts/core/trunk
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/struts/core/trunk
</developerConnection>
</repository>
In beiden Fällen bedeutet:
'<url ...>': URL, um das Repository per Webbrowser zu erforschen
'<connection ...>': Nur-Lese-Zugriff
'<developerConnection ...>': Schreibzugriff
Genauere Erklärungen zu diesen und vielen weiteren Tags und Attributen finden Sie in http://maven.apache.org/maven-1.x/reference/project-descriptor.html.
Im Projektbasisverzeichnis ('${basedir}', z.B. 'D:\MeinWorkspace\MeinProjekt') kann die Datei 'maven.xml' angelegt werden. Diese Datei wird normalerweise nicht benötigt. Der Hauptzweck ist die Definition weiterer speziell für dieses Projekt benötigter 'Goals'.
Goals werden über die spezielle Sprache 'Jelly' definiert, zum Beispiel folgendermaßen:
<?xml version="1.0" encoding="UTF-8"?>
<project default="java:compile" xmlns:j="jelly:core" xmlns:u="jelly:util">
<goal name="meinGoal1">
<echo>Delete some files...</echo>
<delete>
<fileset dir="${basedir}/src/test/resources/">
<include name="*Test.*"/>
</fileset>
</delete>
<attainGoal name="meinGoal2"/>
</goal>
<goal name="meinGoal2">
...
</goal>
<preGoal name="ejb:init">
<j:set var="maven.test.skip.orig" value="${maven.test.skip}"/>
<j:set var="maven.test.skip" value="true"/>
</preGoal>
<postGoal name="ejb:ejb">
<j:set var="maven.test.skip" value="${maven.test.skip.orig}"/>
<attainGoal name="test:test"/>
</postGoal>
</project>
Komplette Beispiele einer 'maven.xml' können zum Beispiel hier und hier angesehen werden.
Weiteres hierzu finden Sie unter:
http://maven.apache.org/reference/user-guide.html#maven_xml
http://maven.apache.org/reference/scripting.html
http://jakarta.apache.org/commons/jelly
Falls Unklarheit über Werte von Properties besteht, können diese leicht ausgegeben werden, indem ein entsprechendes Goal definiert wird:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<goal name="ShowProperties" description="Show some Properties">
<echo>user.home = ${user.home}</echo>
<echo>maven.home.local = ${maven.home.local}</echo>
<echo>maven.plugin.unpacked.dir = ${maven.plugin.unpacked.dir}</echo>
<echo>maven.repo.local = ${maven.repo.local}</echo>
<echo>maven.repo.remote = ${maven.repo.remote}</echo>
<echo>maven.plugin.dir = ${maven.plugin.dir}</echo>
<echo>basedir = ${basedir}</echo>
</goal>
</project>
Wenn es noch keine 'maven.xml' gibt, wird alles in eine 'maven.xml'-Datei gespeichert. Wenn es schon eine gibt, wird der Goal-Teil von '<goal …>' bis '</goal>' dieser hinzugefügt. Wenn Sie anschließend auf der Kommandozeile 'maven ShowProperties' aufrufen, erhalten Sie eine Ausgabe ähnlich zu:
ShowProperties: [echo] user.home = C:\Dokumente und Einstellungen\MeinName [echo] maven.home.local = C:\Dokumente und Einstellungen\MeinName/.maven [echo] maven.plugin.unpacked.dir = C:\Dokumente und Einstellungen\MeinName/.maven/cache [echo] maven.repo.local = C:\Dokumente und Einstellungen\MeinName/.maven/repository [echo] maven.repo.remote = http://www.ibiblio.org/maven [echo] maven.plugin.dir = C:\Java\Maven-1.0.2/plugins [echo] basedir = D:\MeinWorkspace\MeinProjekt
Falls Sie Eclipse einsetzen, beachten Sie Folgendes:
Auschecken über Eclipse:
Alternativ Auschecken über ein anderes Tool (z.B. WinCVS):
Falls Sie Maven nicht nur als Anwender nutzen wollen, sondern die Maven-Konfiguration bearbeiten wollen, sollten Sie sich 'Mevenide for Eclipse' ansehen:
http://mevenide.codehaus.org/mevenide-ui-eclipse
Es bietet Unterstützung für: Maven-Konfiguration, Maven Repository Browser, Editieren der project.xml u.a.