Sto creando un plug-in Maven con un requisito univoco per il corretto funzionamento: è necessario generare nuovi processi di se stesso e quindi attendere che tali processi completino un'attività.Processo forcella Maven con percorso classe corretto
Mentre questo è relativamente banale da eseguire sulla riga di comando, i plugin Maven non vengono richiamati nello stesso modo del codice Java tradizionale e quindi non esiste alcun classpath. Non riesco a capire come risolvere il classpath corretto all'interno del plugin in modo da poter generare una nuova JVM (invocando il metodo Main di un'altra classe all'interno del plugin).
Usando del MavenProject
sono in grado di ottenere un Artifact
riferimento a me stesso (il plugin) e ottenere è directory relativa all'interno del repository Maven locale artefatto corrente:
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;
}
}
Come faccio ad avere un punto di riferimento a tutti le sue dipendenze (e le dipendenze transitive) tali che io possa costruire un percorso di classe completo per una nuova invocazione? Vedo che self
ha un filtro dipendenza ma non so dove applicarlo.
È questo il modo corretto di creare un nuovo processo di "me stesso" all'interno di un plug-in? C'è un modo migliore?
Un servizio di terze parti con cui sto interagendo consente solo una connessione per processo ed eseguirli in serie non è un'opzione. Avrò bisogno di avere da 5 a 20 interazioni in una singola esecuzione di questo plugin. Indagherò i tuoi suggerimenti più tardi, grazie. –