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

Ter*_*ekC 10 maven

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

以下示例摘自此处,其中提供了简要概述,但没有很好地解释差异.

扩展示例:

<project>
  ...
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>2.10</version>
      </extension>
    </extensions>
  </build>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

插件示例:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

khm*_*ise 6

来自文档:

扩展是要在此构建中使用的工件列表.它们将包含在正在运行的构建的类路径中.它们可以启用构建过程的扩展(例如为Wagon传输机制添加ftp提供程序),以及使插件处于活动状态,从而对构建生命周期进行更改.简而言之,扩展是在构建期间激活的工件.扩展不必实际执行任何操作,也不必包含Mojo.出于这个原因,扩展非常适合指定常见插件接口的多个实现中的一个.

以上通常是调用构建扩展,通常org.apache.maven.AbstractMavenLifecycleParticipant用于特定用途.

一个定义的插件

<extension>true</extension>
Run Code Online (Sandbox Code Playgroud)

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