2010-03-24 8 views
17

Ich möchte bestimmte Phasen im Maven-Lebenszyklus in Teilphasen aufteilen. Ich möchte den Ausführungsfluss von einer Subphase zur anderen steuern, ähnlich wie bei ant-Abhängigkeiten.Wie kann ich mehrere Maven Plugins innerhalb einer einzelnen Phase ausführen und ihre jeweilige Ausführungsreihenfolge festlegen?

Zum Beispiel möchte ich das NSIS-Plugin verwenden, um mein Projekt in einem Paket in einem Installer zu verpacken, nachdem mein Projekt in eine WAR-Datei verpackt wurde. Ich würde das alles gerne in der Paketphase machen.

Ist das möglich?

Dank

+0

Hat Maven nicht Plugin Ziele ausführen, um die gleiche Phase des Lebenszyklus in der Reihenfolge, wie sie in der pom aufgeführt sind gebunden? Nur eine Vermutung, kann es wert sein zu testen ... –

+0

Weiß nicht ... Ich werde es versuchen – Yaneeve

Antwort

13

an der gleichen Phase gebunden Plugins in der gleichen Reihenfolge ausgeführt werden sollten, da sie in der POM aufgeführt sind. Unter bestimmten Umständen (z. B. wenn Sie das gleiche Plugin zweimal an eine Phase binden, wie das antrun-Plugin), tritt dies möglicherweise nicht auf, aber dies ist ein Fehler (siehe MNG-2258 und das zugehörige Problem MNG-3719).

+0

aber was ist, wenn Sie sie in nicht verwandten Blöcken, wie den normalen Build-Block vs. einen Build-Block, der Teil ist eines Profilblocks? Es kann einige Plugins im Profilblock geben, die nach denen im Plugins-Block laufen sollten, andere jedoch nicht. – Matthias

+9

Dies passiert nicht (zumindest in Maven 3.0.4). Ich habe zwei Plugins mit Ausführungen, die an generate-sources gebunden sind, eine in der Liste mit etwa 6 Plugins und die andere zuletzt aufgeführt. Der zuletzt aufgelistete (der jedoch von dem zuerst aufgelisteten abhängt) wird immer zuerst ausgeführt. – matt5784

+0

stimme mit matt5784, das ist nervig :( –

6

Ich hatte das gleiche Problem. schau dir How to perform ordered tasks in Maven2 build an. Aus irgendeinem Grund werden die verschiedenen Ziele, die an eine Phase gebunden sind, in einer Hash-Map oder einer anderen ungeordneten Struktur gespeichert, wodurch die Ausführungsreihenfolge zufällig wird. Meine Lösung war, die Aufgaben auf verschiedene Phasen zu verteilen, aber ich denke nicht, dass es in Ihrem Fall viel Sinn dafür gibt (nsis Verpackung ist kein Vorintegrationstest). Sie eine der folgenden Möglichkeiten tun konnte:

1) versuchen Sie Ihr Glück und sehen, ob Maven die richtige Reihenfolge für Sie chosses (Sie wahrscheinlich versucht, das schon)

2) Standalone-Plugin - führen Sie das Ziel außerhalb der Lebenszyklus. etwas wie: mvn package org.codehaus.mojo: nsis-maven-plugin: 1.0: kompilieren.

3) trennen Sie sie in Modul: haben Sie ein Elternteil Pom, das zwei Untermodule enthält, eins - Ihr Kriegsprojekt und das andere für das nsis Projekt.

4) Verwenden Sie einen benutzerdefinierten Lebenszyklus durch Ändern des Typs, in Ihrem Fall können Sie "exe" verwenden. Dies geschieht durch Verwendung einer benutzerdefinierten Erweiterung (guide to using extension)

5) Verwenden Sie die jetspeed-mvn-maven-plugin. Ich habe es nie benutzt, aber es scheint für Ihre Bedürfnisse relevant zu sein.

hoffe das gibt dir neue Ideen.

Ronen

+0

Danke, aber abgesehen von einigen "Knicks" mit dem Standard-Lebenszyklus @ Pascal ist richtig – Yaneeve

+1

das sind keine "Knicke". eigentlich, wenn Sie die Maven Jungs fragen, werden sie Ihnen sagen, dass Nummer 3 am besten mit dem "Maven Way" übereinstimmt, das ist die Trennung von Modulen und wenn Sie darüber nachdenken, macht es sehr viel Sinn, eine Webanwendung zu erstellen und Ein Installer-Projekt sind zwei verschiedene Dinge. – rperez