Ich erstelle ein Maven Plug-in mit einer ziemlich einzigartigen Anforderung für den korrekten Betrieb: Es muss neue Prozesse von sich selbst erzeugen und dann warten, bis diese Prozesse eine Aufgabe abgeschlossen haben.Maven Plugin Fork Prozess mit korrektem Classpath
Während dies in der Befehlszeile relativ trivial ist, werden Maven-Plugins nicht auf die gleiche Weise wie herkömmlicher Java-Code aufgerufen, und daher gibt es keinen Klassenpfad. Ich kann nicht herausfinden, wie man den richtigen Klassenpfad innerhalb des Plugins löst, so dass ich eine neue JVM erzeugen kann (indem ich die Main-Methode einer anderen Klasse innerhalb des Plugins aufruft).
Mit der aktuellen Artefakts MavenProject
Ich bin in der Lage einen Artifact
Bezug auf mir (das Plugin) zu bekommen und bekommt es relativ Verzeichnis im lokalen Maven-Repository ist:
Artifact self = null;
for (Artifact artifact : project.getPluginArtifacts()) {
if ("my-group-id".equals(artifact.getGroupId()) && "my-artifact-id".equals(artifact.getArtifactId())) {
self = artifact;
break;
}
}
if (self == null) {
throw new MojoExecutionException("Could not find representation of this plugin in project.");
}
for (ArtifactRepository artifactRepository : project.getPluginArtifactRepositories()) {
String path = artifactRepository.pathOf(self);
if (path != null) {
getLog().info("relative path to self: " + path);
break;
}
}
Wie bekomme ich einen Verweis auf all seine Abhängigkeiten (und transitiven Abhängigkeiten), so dass ich einen vollständigen Klassenpfad für einen neuen Aufruf konstruieren kann? Ich sehe, dass self
hat einen Abhängigkeitsfilter, aber ich weiß nicht, wo es anzuwenden ist.
Ist dies der richtige Weg, um einen neuen Prozess von "mir selbst" in einem Plugin zu erstellen? Gibt es einen besseren Weg?
Ein Dienst von Drittanbietern, mit dem ich zusammenarbeite, erlaubt nur eine Verbindung pro Prozess und die serielle Ausführung ist keine Option. Ich muss irgendwo zwischen 5 und 20 Interaktionen in einem einzigen Durchlauf dieses Plugins haben. Ich werde Ihre Vorschläge später untersuchen, danke. –