【发布时间】:2012-12-26 09:56:34
【问题描述】:
我正在创建一个 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 有一个依赖过滤器,但我不知道在哪里应用它。
这是在插件中创建“我自己”的新进程的正确方法吗?有没有更好的办法?
【问题讨论】:
标签: maven maven-plugin