適切な操作のためのかなりユニークな要件を持つ Maven プラグインを作成しています。それは、それ自体の新しいプロセスを生成し、それらのプロセスがタスクを完了するのを待つ必要があります。
これはコマンドラインで行うのは比較的簡単ですが、Maven プラグインは従来の Java コードと同じ方法で呼び出されないため、クラスパスはありません。プラグイン内の正しいクラスパスを解決して、新しい JVM を生成できるようにする方法がわかりません (プラグイン内の別のクラスの Main メソッドを呼び出します)。
現在のアーティファクトを使用して、自分自身 (プラグイン) へMavenProject
の参照を取得Artifact
し、ローカル Maven リポジトリ内の相対ディレクトリを取得できます。
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;
}
}
新しい呼び出しの完全なクラスパスを構築できるように、すべての依存関係 (および推移的な依存関係) への参照を取得するにはどうすればよいですか? 依存関係フィルターがあることがわかりself
ますが、どこに適用すればよいかわかりません。
これは、プラグイン内に「自分」の新しいプロセスを作成する適切な方法ですか? より良い方法はありますか?