Wenn ich die Koordinaten eines Artefakts und einen Namen der Klasse innerhalb dieses Artefakts kenne, kann ich Maven veranlassen, die Klasse einschließlich aller Abhängigkeiten auf dem Java-Klassenpfad auszuführen?Wie kann ich eine Java-Klasse innerhalb eines Maven-Artefakts ausführen und Abhängigkeiten automatisch auflösen?
Angenommen, ein Mitarbeiter erzählte mir von einem Tool, das ich ausführen kann und das auf unserem internen Nexus mit den Artefaktkoordinaten example:cool-tools:1.0.0
veröffentlicht wurde. Ich habe this answer verwendet, um das Artefakt herunterzuladen. Jetzt weiß ich, dass der Hauptklassenname example.Main
ist. Aber wenn ich einfach zum Download-Ort des Artefakts gehe und java -cp cool-tools-1.0.0.jar example.Main
starte, bekomme ich NoClassDefFoundError
s für alle Abhängigkeiten von cool-tools
.
Ich kenne die maven-exec-plugin
, aber soweit ich das sagen kann, ist das nur für Projekte, wo Sie die Quelle haben. Angenommen, ich habe keinen Zugriff auf die Quelle, nur das Nexus, das das Werkzeug (und alle seine Abhängigkeiten) enthält. Im Idealfall würde ich etwas wie mvn exec:exec -DmainArtifact='example:cool-tools:1.0.0' -DmainClass='example.Main'
machen, aber ich glaube nicht, dass das exec-Plugin tatsächlich dazu in der Lage ist.
ETA: Um klar zu sein, habe ich nicht haben ein lokales Projekt/POM. Ich möchte dies mit nur die Befehlszeile, ohne ein POM, wenn möglich zu schreiben.
ich stark bezweifeln, dass Sie dies erreichen können, ohne einen pom zu verwenden. Es könnte jedoch möglich sein, ein temporäres Pom in der Befehlszeile zu erstellen, wie im Folgenden: echo "" | mvn -f - –
Torsten
Nicht möglich. Der Pom listet die Abhängigkeiten auf, ohne sie wird maven niemals einen Klassenpfad erstellen. –
@Coderer Ihre Annahme über das exec-Plugin ist falsch. Sie können die Abhängigkeit in einem separaten Pom definieren, wo Sie die Abhängigkeiten definieren und das Exec-Plugin die Klasse ausführen lassen. – khmarbaise