pom.xml 上的插件元素中的依赖项有什么用

whats the use of the dependencies in the plugin element on a pom.xml

我看到您可以在 pom 中添加插件元素的依赖项元素。

问题:有什么用?插件使用的所有库不应该包含在其中吗?是否对插件使用的一些库附加费用?

<plugin>
    <groupId>org.raml.plugins</groupId>
    <artifactId>raml-jaxrs-maven-plugin</artifactId>
    <version>1.3.4</version>
    <dependencies>
        <dependency>
            <groupId>org.raml</groupId>
            <artifactId>raml-parser-2</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</plugin>

来自官方 Maven POM Reference 文档:

dependencies: Dependencies are seen a lot within the POM, and are an element under all plugins element blocks. The dependencies have the same structure and function as under that base build. The major difference in this case is that instead of applying as dependencies of the project, they now apply as dependencies of the plugin that they are under. The power of this is to alter the dependency list of a plugin, perhaps by removing an unused runtime dependency via exclusions, or by altering the version of a required dependency.

也就是说,您可以在该特定插件的范围内从插件类路径中排除某些库或覆盖某些版本。

向插件添加依赖项不会改变正在构建的应用程序的类路径。插件的 dependencies 是进一步可配置性的入口点,可直接更改其类路径。

在大多数情况下,您不需要在该粒度级别上工作,但在某些情况下确实非常有用,并且某些插件实际上需要或建议添加特定的依赖项,例如用于转换或工作的插件代码生成(WSDL 到 Java,例如)可能需要进一步的依赖(您选择哪个版本和哪个版本)等等。


官方Maven - Guide to configure plugins文档提供了进一步的官方示例:

You could configure the dependencies of the Build plugins, commonly to use a more recent dependency version.

For instance, the Maven Antrun Plugin version 1.2 uses Ant version 1.6.5, if you want to use the latest Ant version when running this plugin, you need to add <dependencies> element.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.2</version>
        ...
        <dependencies>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.7.1</version>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-launcher</artifactId>
            <version>1.7.1</version>
          </dependency>
         </dependencies>
      </plugin>
    </plugins>
  </build>
  ...
</project>

官方Exec Maven Plugin documentation提供了另一个例子,如果你想使用它的java目标来执行一个Java程序,你实际上需要将库添加到它的类路径但是您不想更改正在构建的应用程序的类路径:这是一种更加简洁和合理的方法。

插件元素中的依赖项允许您定义希望插件使用的特定版本。

这是 maven.apache.org

上的一个很好的例子

For instance, the Maven Antrun Plugin version 1.2 uses Ant version 1.6.5, if you want to use the latest Ant version when running this plugin, you need to add <dependencies> element