【问题标题】:How to obtain the artifactId of the pom (bom) listed in a maven project dependencyManagement block如何获取maven项目dependencyManagement块中列出的pom(bom)的artifactId
【发布时间】:2019-02-24 01:44:06
【问题描述】:

我正在研究一个 maven 生命周期扩展类,并且需要检查给定项目的 dependencyManagement 块中列出的 pom (bom) 的坐标详细信息。我需要能够在我在扩展类中覆盖的 afterProjectsRead 方法中执行此操作。我了解<scope>import</scope> 标记会导致dependencyManagement 依赖项部分被导入的pom(bom)中列出的依赖项替换。但是我需要在我的扩展类中查看 pom (bom) 的坐标详细信息,但似乎导入已经发生,并且当我进入我的 afterProjectsRead 扩展方法时这些详细信息不可用。

需要明确的是,给定 maven 项目中的 dependencyManagement 块如下所示:

<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 生命周期扩展类正在尝试这样做:

@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 和版本,但这些信息已经被 some-project-bom.xml 中实际列出的依赖项所取代。因此,我正在检索 pom (bom) xml 文件中指定的依赖项的坐标详细信息。

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

【问题讨论】:

    标签: maven maven-3 maven-plugin


    【解决方案1】:

    我找到了解决方案 - 从我正在开发的生命周期扩展类中,我能够通过传入的 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");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2016-11-30
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2014-06-24
      • 2021-06-12
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多