什么是在pom.xml上的plugin元素中使用依赖项

时间:2016-08-27 11:44:47

标签: java maven pom.xml maven-plugin maven-dependency

我已经看到你可以在一个pom中添加插件元素的依赖元素。

问题:有什么用?是否应该将插件使用的所有lib包含在其中?是否对插件使用的某些lib附加费?

{{1}}

2 个答案:

答案 0 :(得分:1)

来自官方Maven POM Reference文件:

  

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

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

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

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

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

  

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

     

例如,Maven Antrun插件版本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 Plugin documentation提供了另一个示例,以防您希望使用其java目标来执行Java程序,并且您实际上需要将库添加到其类路径中但您不希望改变构建下的应用程序的类路径:这是一种更清洁和合理的方法。

答案 1 :(得分:0)

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

以下是maven.apache.org

的一个很好的例子
  

例如,Maven Antrun插件版本1.2使用Ant版本1.6.5,如果   如果您想在运行此插件时使用最新的Ant版本,则需要添加<dependencies>元素