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中但未通过Artifacts getter 导出的信息?

回答:

是的,这是可能的。

我们可以使用ProjectBuilderAPI 在内存中构建项目:

建立项目的内存描述。

通过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

回到顶部