如何扫描maven插件依赖项?

时间:2015-11-29 00:11:02

标签: maven maven-plugin

在我的项目中,我将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 个答案:

答案 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());
   }
}

希望有所帮助。