1

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

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

<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>
4

2 回答 2

1

来自官方Maven POM 参考文档:

dependencies:在 POM 中可以看到很多依赖项,并且是所有插件元素块下的一个元素。依赖项具有与该基本构建相同的结构和功能。这种情况下的主要区别在于,它们现在不是作为项目的依赖项应用,而是作为它们所在插件的依赖项应用。这样做的作用是改变插件的依赖列表,可能是通过删除未使用的runtime依赖exclusions,或者通过更改所需依赖的版本。

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

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

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


官方Maven - Guide to configure plugins文档提供了另一个官方示例:

您可以配置构建插件的依赖项,通常使用更新的依赖项版本。

比如Maven Antrun Plugin 1.2版本使用Ant 1.6.5版本,如果你想在运行这个插件时使用最新的Ant版本,你需要添加<dependencies>元素。

<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 插件文档提供,以防您想使用其java目标来执行 Java 程序,并且您实际上需要将库添加到其类路径但您不想更改正在构建的应用程序的类路径:这是一种更清洁和合理的方法。

于 2016-08-27T11:55:30.443 回答
0

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

这是maven.apache.org上的一个很好的例子

比如 Maven Antrun Plugin 1.2 版本使用 Ant 1.6.5 版本,如果你想在运行这个插件时使用最新的 Ant 版本,你需要添加<dependencies>元素

于 2016-08-27T12:10:17.153 回答