在我的项目中,我将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?
答案 0 :(得分:0)
由于commons-lang3仅被声明为特定插件的依赖项,因此在编译期间不可用。您必须明确定义commons-lang3作为依赖项(如果它不作为传递依赖项包含),类似于您定义commons-io的方式。
答案 1 :(得分:0)
使用Maven API,您可以从MavenProject获取Build实例,然后从中获取已配置插件的列表,然后从每个Plugin对象中获取其依赖关系,如下所示:
@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());
}
}
希望有所帮助。