Maven插件API:从Artifact获取MavenProject
我试图(递归地)提取项目中使用的所有依赖项的信息。看来MavenProject类提供了我需要的所有信息。但我不知道如何将的实例Artifact
转换为的实例MavenProject
/** *
*
* @reqiresDependencyResolution
*
*/
@Mojo(name = "license-overview", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
public class MyMojo extends AbstractMojo {
/**
* @parameter default-value="${project}"
* @required
* @readonly
*/
MavenProject project;
public void execute() throws MojoExecutionException {
Set<Artifact> artifacts= project.getArtifacts();
for (Artifact artifact : artifacts) {
//Here I need to access the artifact's name, license, author, etc.
System.out.println("*** "+artifact.getArtifactId()+"***");
}
}
}
如何访问位于我的依赖项pom中但未通过Artifact
s getter 导出的信息?
回答:
是的,这是可能的。
我们可以使用ProjectBuilder
API 在内存中构建项目:
建立项目的内存描述。
通过build(projectArtifact,
request)使用我们感兴趣的工件和一个ProjectBuildingRequest
(拥有各种参数,例如远程/本地存储库的位置等)调用该方法,这将建立一个MavenProject
内存中。
考虑下面的MOJO,它将打印所有依赖项的名称:
@Mojo(name = "foo", requiresDependencyResolution = ResolutionScope.RUNTIME)public class MyMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;
@Parameter(defaultValue = "${session}", readonly = true, required = true)
private MavenSession session;
@Component
private ProjectBuilder projectBuilder;
public void execute() throws MojoExecutionException, MojoFailureException {
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
try {
for (Artifact artifact : project.getArtifacts()) {
buildingRequest.setProject(null);
MavenProject mavenProject = projectBuilder.build(artifact, buildingRequest).getProject();
System.out.println(mavenProject.getName());
}
} catch (ProjectBuildingException e) {
throw new MojoExecutionException("Error while building project", e);
}
}
}
这里有几个主要成分:
- 该
requiresDependencyResolution
告诉Maven,我们需要在执行前必须解决的依赖关系。在这种情况下,我将其指定为,RUNTIME
以便解决所有编译和运行时依赖项。您当然可以将其设置为ResolutionScope
。你要。 - 项目构建器将注入
@Component
注解。 - 默认的构建请求是使用当前Maven会话的参数构建的。我们只需要通过将当前项目显式设置为来覆盖当前项目
null
,否则将不会发生任何事情。
有权使用时MavenProject
,您可以打印所需的所有信息,例如开发人员等。
如果要打印依赖项(直接和传递),则还需要setResolveDependencies(true)
在构建请求上调用,否则,将不会在构建项目中填充它们。
以上是 Maven插件API:从Artifact获取MavenProject 的全部内容, 来源链接: utcz.com/qa/417185.html