在Maven中,扩展名和插件之间有什么区别

时间:2017-04-07 17:33:53

标签: maven

Maven中扩展程序和插件之间的功能区别是什么?

以下示例摘自here,其中提供了一个简短的摘要,但没有很好地解释这些差异。

扩展示例:

<project>
  ...
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>2.10</version>
      </extension>
    </extensions>
  </build>
  ...
</project>

插件示例:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

1 个答案:

答案 0 :(得分:6)

From the docs:

  

扩展是此构建中要使用的工件列表。   它们将包含在正在运行的构建的类路径中。他们能   启用构建过程的扩展(例如添加ftp提供程序   对于Wagon运输机制),以及使插件有效   这会改变构建生命周期。简而言之,扩展是   在构建期间激活的工件。扩展不必   实际上做任何事情也不包含Mojo。出于这个原因,扩展   非常适合指定a的多个实现中的一个   常见的插件界面。

以上通常是调用构建扩展,通常使用org.apache.maven.AbstractMavenLifecycleParticipant进行特定用法。

使用

定义的插件
<extension>true</extension>

通常会定义它自己的生命周期或packaging types,就像maven-bundle-plugin一样,可以定义<packaging>bundle</packaging>或Maven Tycho定义包装类型:<packaging>eclipse-plugin</packaging>