Как проверить зависимость плагина maven?

В моем проекте я прикрепил commons-lang3 к плагину и commons-io к проекту:

<build>
    <plugins>
        <plugin>
            <groupId>@project.groupId@</groupId>
            <artifactId>@project.artifactId@</artifactId>
            <version>@project.version@</version>
               (...)
            <dependencies>
                <dependency>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-lang3</artifactId>
                    <version>3.4</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
</dependencies>

В моем собственном плагине (внутри моего mojo) я могу найти commons-io

@Component
private MavenProject project;
(...)
project.getDependecies(); // [{groupId=commons-io, artifactId=commons-io...

Как найти commons-lang3?

2 ответа

Решение

Используя Maven API, из MavenProject вы можете получить экземпляр Build, а из него затем список настроенных плагинов, из каждого объекта плагинов вы можете получить его зависимости следующим образом:

@Component
private PluginDescriptor pluginDescriptor;
(...)

List<Plugin> plugins = project.getBuild().getPlugins();
for (Plugin p : plugins) {
    if (p.getId().equals(pluginDescriptor.getId())) {
       List<Dependency> pluginDependencies = p.getDependencies();
       // your logic here
       break;
    }
}

Если вы действительно хотите охватить каждый случай, вы также можете отсканировать плагины, настроенные в текущих активных профилях, следующим образом:

List<Profile> profiles = project.getActiveProfiles();
for (Profile p : profiles) {
   // from personal experience, don't forget this check!
   if (p.getBuild() != null) {
        checkAsShownAbove(p.getBuild().getPlugins());
   }
}

Надеюсь, это поможет.

Поскольку commons-lang3 объявлен как зависимость только для определенного плагина, он не доступен во время компиляции. Вы должны явно определить commons-lang3 как зависимость (если она не включена как транзитивная зависимость), аналогично тому, как вы определили commons-io.

Другие вопросы по тегам