Eigene JAR von Maven aus aufrufen (und auf dessen Beendigung warten)

Kryptaesthesie

Erfahrenes Mitglied
Moin Moin,

ich würde gerne in mein Maven-Projekt ein Goal einbauen, das ein eigenes Programm startet.
Ich finde allerdings immer nur Lösungen, die ein Programm starten, aber nicht auf dessen Beendigung warten, bevor mit der eigentlichen Maven-Aktion fortgefahren wird.
Ich möchte gerne eine XML-Datei mit den Werten aus einem zusätzlichen/eigenen Programm befüllen.

Ist das prinzipiell möglich?
Wisst ihr eine Anleitung, oder habt ein Stichwort für mich, nach dem ich suchen kann?


Besten Dank schon mal und Gruß
Gerrit
 
Was ist das für ein Programm? Wenn es ein Java-Programm ist, kannst du ja z.B. ein kleines maven-plugin "drum herum wrappen"...
 
Moin,

Was ist das für ein Programm? Wenn es ein Java-Programm ist, kannst du ja z.B. ein kleines maven-plugin "drum herum wrappen"...

Da bin ich derzeit bei das auszuprobieren und mich einzulesen.
Maven bietet ja ein Beispiel-Plugin, das einem den groben Rahmen schon mal zeigt. Das habe ich mal geladen und ausgeführt.
Das Programm, das ich vom Plugin "wrappen" lassen würde, gibt es noch nicht. Ich kann es also in Java programmieren.

Ich lasse Maven ein war-File bauen und darin benötige ich eine XML-Datei, dessen Inhalt ich vorm Build des war-Files mit Daten aus einer Datenbank befüllen möchte.
Darum war es mir wichtig, dass ich nicht einfach nur ein Programm anstoße, sondern dass Maven erst weiter macht, wenn das Befüllen der XML-Datei abgeschlossen ist.
Auf dem von dir vorgeschlagenen Plugin-Weg, sollte das ja funktionieren.

Unklar sind mir noch ein paar Dinge:
1) Wie bekomme ich bspw. den Pfad heraus, wo das Plugin gerade ausgeführt wird. Ich muss ja meine XML-Datei irgendwo speichern und da möchte ich natürlich keinen absoluten Pfad angeben.
2) Wie kann ich bei execute() des Plugins zurückgeben, wenn etwas schief gelaufen ist? Weil in diesem Fall muss Maven nicht weitermachen und sollte abbrechen.

Aber ich bin auch noch nicht fertig mit dem Durchstöbern des Tutorials auf der Maven-Seite.
Von daher ... vielleicht werden meine Fragen da ja noch beantwortet?! :)
 
Joar, dann würde ich zwei Artefakte anlegen, das effektive Programm und das Mavenplugin, welches das Programm wrappt. So von wegen Wiederverwendbarkeit und so.

1) Huhm, dafür gibt's Maven Properties, wie z.B: ${basedir}. Dafür eignet sich meiner Meinung nach der target-Ordner, fällt mir aber auswendig nicht ein, wie da das Property für heisst, da werden ja auch die java-Klassen reinkompiliert, welche dann vom "war-pack-Plugin" gelesen werden.
2) Die execute-methode wird wohl eine Exception in der Signatur haben? ;-)

Tipp: Aufpassen mit Abhängigkeiten auf Umsysteme während des Builds. Es gibt ja eine Regel, die besagt, dass, wenn man ein Projekt auscheckt, es ohne weitere Arbeiten buildbar sein soll. Das ist meiner Meinung nach per sé nicht immer so einfach möglich und macht auch keinen Sinn - wer will schon ein SDK auschecken? - aber darauf achten könnte man sich schon.
Aber um das besser beurteilen zu können: Was steht denn im XML so drin? Ich kann mir eben vorstellen, dass man dieses XML während der Laufzeit zur Verfügung stellen kann, z.B. ein cron-job, welcher diese Datei jeweils auf die entsprechenden Server kopiert.

Gruss
slowy
 
Hi,

Du kannst per Maven Filter dynamisch Properties setzen (z.B. mit Nutzer oder Profilbezug), in denen Du Deine DB Parameter vorhältst. Damit bleibt Dein Build einigermaßen portabel.

Als nächstes würde ich mir mal den maven-archetype (mvn archetype:generate) für maven plugins schnappen und mir einfach mal das generierte Plugin-Projekt anschauen.

Das meiste ist wirklich einfach umzusetzen und Dinge wie Injektion oder Properties sind ausreichend gut auf der Maven-Website beschrieben.

Grüße,
gore
 
Zurück