Ich habe ein benutzerdefiniertes Maven2-Plug-In mit Ant erstellt. Ich möchte ein anderes Maven-Plug-In aufrufen, insbesondere das Cargo Maven2-Plug-In, unmittelbar nachdem das benutzerdefinierte Ant-Plug-In erfolgreich abgeschlossen wurde. Ich möchte jedoch nicht das Cargo-Plug-In an ein anderes Ziel oder eine andere Phase anhängen. Gibt es eine Möglichkeit, sie nacheinander auszuführen, ohne ein Batch-Skript schreiben zu müssen? Gibt es eine Möglichkeit, das benutzerdefinierte Ant-Plug-In aufzurufen, um das Cargo-Plug-In zu starten?
Antworten
Zu viele Anzeigen?Siehe diese Diskussion: Re: calling plugin in another plugin? Laut den Maven-Entwicklern ist dies nicht die Art und Weise, wie Plugins funktionieren sollen.
Es gibt jedoch diesen interessanten Kommentar:
Plugins/Mojos sollten dünne Wrapper um eine Bibliothek sein. Sie möchten die Bibliothek direkt verwenden.
Cargo ist nicht nur ein Maven-Plugin, es hat auch eine Java-API und eine Ant-Aufgabe. Daher könnten Sie wahrscheinlich:
-
den Cargo Ant-Task aus Ihrem Ant-Mojo aufrufen (Ich denke, Sie benötigen nur die Cargo-JARs im Klassenpfad Ihres Plugins);
-
Ihr Ant-Mojo in Java neu schreiben und die Cargo-API aufrufen (Sie sollten sich die Quellen des Cargo-Plugins ansehen).
Das Ant-Skript, das vom maven-ant-plugin ausgeführt wird, ist sich nicht wirklich bewusst über Maven als solches; dieses Plugin ist für die Abwärtskompatibilität mit benutzerdefinierten Ant-Aufgaben konzipiert. Ich kann mir jedoch keinen sauberen Weg vorstellen, um das zu erreichen, obwohl es möglicherweise eine Art Hack gibt, der es Ihnen ermöglicht, dies zu tun.
Es sollte auch möglich sein, innerhalb von Ant eine zweite Instanz von Maven auszuführen, die ausschließlich das Cargo-Ziel ausführt, aber in diesem Fall könnten Probleme mit gesperrten Dateien und ähnlichem auftreten. Der Weg, es zu tun, wäre einfach, ein exec
-Tag in Ihrem Ant-Skript zu verwenden und das Ausführen des "mvn" Executables mit den entsprechenden Zielen als Argumenten aufzurufen.
Der sauberste Weg ist es, das Cargo-Ziel einfach an eine Phase des Builds zu binden und das nach dem Abschluss von Ant auszuführen. Ich sehe keinen Nachteil dieses Ansatzes - Sie haben bisher keine spezifischen Gründe genannt, warum Sie dies vermeiden möchten.
Sie könnten an den beiden folgenden Maven interessiert sein
Das GMaven-Plugin ermöglicht Ihnen das Schreiben von Maven-Plugins mit Groovy. Dadurch erhalten Sie vollen Zugriff auf ant mithilfe des Ant Builder, es ist ein sehr einfacher Weg, Ant-Skripte in Groovy zu schreiben. Dann könnten Sie in diesem Groovy-Mojo jeden Maven-Mojo mit dem Mojo Executor aufrufen.
Ich habe sie in mehreren benutzerdefinierten Maven-Plugins verwendet und keinen einfacheren Weg gefunden, Mojos zu schreiben und zu kombinieren.