当前位置: 首页 > 知识库问答 >
问题:

如何获取maven项目依赖管理块中列出的pom(bom)的工件ID

万承志
2023-03-14

我正在研究maven生命周期扩展类,需要检查给定项目的dependencyManagement块中列出的pom(bom)的坐标细节。我需要能够在扩展类中重写的afterProjectsRead方法中实现这一点。我理解

明确地说,给定maven项目中的依赖管理块如下所示:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>some.project</groupId>
            <artifactId>some-project-bom</artifactId>
            <version>0.1-SNAPSHOT</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

我的maven lifecycle extension类正试图做到这一点:

@Override
public void afterProjectsRead(MavenSession session) {

    MavenProject proj = session.getCurrentProject();
    DependencyManagement depMgmt = proj.getDependencyManagement();
    for (Dependency dep : depMgmt.getDependencies()) {
        System.out.println(dep.getArtifactId() + ":" + dep.getVersion());
    }
}   

以获取参考pom(bom)的坐标细节

我当时希望获得pom(bom)本身的groupId、artifactId和版本,但这些信息已经被某些项目bom中实际列出的依赖项所取代。xml。因此,我正在检索pom(bom)xml文件中指定的依赖项的坐标细节。

这可能吗?也许是通过MavenSession对象?


共有1个答案

上官华池
2023-03-14

我找到了解决方案——从我正在开发的生命周期扩展类中,我能够通过传入的MavenSession对象检索MavenProject。从MavenProject中,我能够获得原始模型对象,并在导入和替换之前从模型对象中检索pom的DependencyManagement对象。

@Override
public void afterProjectsRead(MavenSession session) {
    MavenProject proj = session.getProject();
    depMgmt = proj.getOriginalModel().getDependencyManagement();
    for (Dependency dep : depMgmt.getDependencies()) {
        System.out.println("found this artifact in dependencyMgmt section-> "
                    + dep.getArtifactId() + ":" + dep.getVersion() + "\n");
    }
}
 类似资料:
  • 最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个

  • 我有一个多普姆专家项目。在我的pom根中,我有一个父pom和依赖管理,具有Spring依赖关系。 在我的人工战争中,我有这个pom。xml: 我的问题是,在父pom中有一个spring旧版本(4.1.8),在我的根pom中,我使用4.3.3版本和工件spring框架bom。在“我的依赖项列表”中,项目显示为“父项”pom版本。如何优先考虑pom根的依赖关系?

  • 问题内容: 是否有任何预先存在的Maven插件或命令来更新POM中的依赖关系?示例:(如果这是在我的POM中) 有没有可以运行的命令或插件来将依赖关系更新为: 问题答案: 尝试使用maven-versions-plugin,尤其是versions:use-latest-versions目标。

  • 假设<code>B:1.0.1,但是子项目应该依赖于<code>A:1.2(有意覆盖传递依赖性)。 很容易发现 ,并从它的所有子POM中删除样板文件。不幸的是,下面的设置导致在最终的工件中使用两个版本:< code>A:1.0.1(作为< code>B:1.0.1的依赖项)和< code>A:1.0.2(来自父pom中的显式声明)。 如何在所有子项目中强制使用< code>A:1.0.2版本,并在

  • 我目前在一个项目中工作,该项目包括大约12个子项目。 每个子项目都包含一个POM,该POM单独构建依赖关系。 上游子项目包括下游子项目作为依赖项,其方式与包含对log4j: 这似乎对我们管用。 然而,今天,经过11个月的开发,我决定重温这十几个POM文件,并考虑到重构。 我随后发现了和标记,并开始怀疑我的Maven项目策略是否“正确”。 重构我的POM,使最上层的POM(一个Web WAR项目)变

  • 我创建了一个Maven项目(可重用库),该项目有许多依赖项(编译时和运行时),它们也可以过渡地依赖于其他许多依赖项。在maven中,我可以在pom中添加依赖项。xml及其可传递依赖关系将自动处理。所以,我将毫无问题地运行。 现在,我有一个非Maven(基于Ant的)项目,上面创建的库(Maven Lib)将使用它。 在这种情况下,运行时间