如何扫描maven插件依赖?
How to scan maven plugin dependency?
在我的项目中,我将 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?
由于 commons-lang3 仅被声明为特定插件的依赖项,因此在编译期间不可用。您必须将 commons-lang3 显式定义为依赖项(如果它没有作为传递依赖项包含在内)类似于您定义 commons-io 的方式。
使用 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-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?
由于 commons-lang3 仅被声明为特定插件的依赖项,因此在编译期间不可用。您必须将 commons-lang3 显式定义为依赖项(如果它没有作为传递依赖项包含在内)类似于您定义 commons-io 的方式。
使用 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());
}
}
希望对您有所帮助。