![](/img/trans.png)
[英]Get list of maven dependencies of org.apache.maven.project.MavenProject
[英]Maven Plugin API: Get MavenProject from Artifact
我試圖提取有關我的項目中使用的所有依賴項(遞歸)的信息。 看起來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
的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
注釋注入項目構建器。 null
來覆蓋當前項目,否則什么都不會發生。 當您有權訪問MavenProject
,您可以打印所有關於它的信息,比如開發人員等。
如果要打印依賴項(直接和傳遞),則還需要在構建請求上調用setResolveDependencies(true)
,否則,它們將不會在構建的項目中填充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.