当前位置: 首页 > 面试题库 >

Maven插件API:从Artifact获取MavenProject

邢法
2023-03-14
问题内容

我试图(递归地)提取项目中使用的所有依赖项的信息。看来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)在构建请求上调用,否则,将不会在构建项目中填充它们。



 类似资料:
  • 我正在尝试创建插件,当有人打开箱子时,它会检查箱子的位置是否与我的config.yml中的任何位置不匹配。所以我想这样做: 编辑:现在我有了这段代码: 但是当我右键点击箱子时,消息jeej没有出现,所有出现的东西都是消息Hodnota x je 0。但是我的配置中有几个键,x在任何地方都不是0。在控制台中,会出现此错误:

  • 我一直在尝试为 Java 工件的部署任务配置 Jenkins 作业。我希望用户能够选择要部署的工件版本,这些版本存储在Nexus存储库中。为此,我正在使用Maven元数据插件从存储库中获取工件版本列表。 问题是,由于java.net.UnknownHostException,Jenkins服务器无法解析存储库基本URL(https://nexus.repos.prod.com/nexus/cont

  • 我的问题是:根据这些参数,我可以在哪里归档标准maven插件的API fefinition?

  • 我是maven的新手,我已经用pom文件编写了自己的maven插件 然后,在我的IDE(intellij)中,我使用clean install安装maven插件 扎克

  • 问题内容: Q1) 在我的reactjs应用程序中,我正在尝试从后端Nodejs服务器获取API。API会根据请求响应图像文件。 我可以在http://192.168.22.124:3000/source/592018124023PM-pexels- photo.jpg 上访问并查看图像文件 但是在我的reactjs客户端上,我在控制台日志上收到此错误。 未捕获(承诺)SyntaxError:意外

  • 主要内容:如下表所示,Maven 提供了如下 2 种类型的插件。,插件目标,插件绑定Maven 实际上是一个依赖插件执行的框架,它执行的每个任务实际上都由插件完成的。Maven 的核心发布包中并不包含任何 Maven 插件,它们以独立构件的形式存在, 只有在 Maven 需要使用某个插件时,才会去仓库中下载。 如下表所示,Maven 提供了如下 2 种类型的插件。 插件类型 描述 Build plugins 在项目构建过程中执行,在 pom.xml 中的 build 元素中配置