Как получить artifactId pom (bom), перечисленных в блоке зависимостей проекта maven проекта - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над классом расширения жизненного цикла maven, и мне нужно изучить подробные координаты pom (bom), перечисленных в блоке dependencyManagement данного проекта.Мне нужно быть в состоянии сделать это в методе afterProjectsRead, который я переопределяю в классе расширения.Я понимаю, что тег <scope>import</scope> вызывает замену раздела зависимостей dependencyManagement на зависимости, перечисленные в импортированном pom (bom).Но мне нужно взглянуть на детали координат pom (bom) в моем классе расширения, но кажется, что импорт уже произошел, и эти данные недоступны, когда я попадаю в мой метод расширения afterProjectsRead.

, чтобы бытьясно, что блок dependencyManagement в данном проекте 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 пытается сделать это:

@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), на который ссылаются

Я надеялся получить groupId, artifactId и версию самого pom (bom) в тот момент, но эта информация уже заменена зависимостями, фактически перечисленными в некоторыхпроект-bom.xml.И поэтому я получаю сведения о координатах зависимостей, указанных в файле pom (bom) xml.

Возможно ли это?может быть через объект MavenSession?

1 Ответ

0 голосов
/ 20 сентября 2018

Я нашел решение этой проблемы - из класса расширения жизненного цикла, который я разрабатываю, я смог получить MavenProject через объект, переданный в MavenSession.Из MavenProject мне удалось получить исходный объект Model, а из объекта Model я получил объект DependencyManagement объекта pom до импорта и замены.

@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");
    }
}
...