Как проверить зависимость плагина 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.