Maven插件

maven的生命周期时抽象的,这意味着生命周期本身不做任何实际的工作,实际的任务都交由插件来完成。每个构建步骤都可以绑定一个或多个插件行为,而且maven为都多数构建步骤编写并绑定了默认插件。例如针对编译的插件maven-compiler-plugin,针对测试的插件maven-surefire-plugin等。用户也可配置插件定制构建行为,甚至自己编写插件。

插件目标

插件以独立的构件形式存在,maven会在需要的时候下载并使用插件。

每个插件往往能完成多个任务。例如maven-dependency-plugin,它能分析依赖来源,列出依赖树等,这些功能聚集在一个插件里,每个功能就是一个插件目标。

maven-dependency-plugin有十多个模板,上述功能分别对应插件目标为dependency:list、dependency:tree。这是通用写法,冒号前面是插件前缀,冒号后面是插件目标。

插件绑定

maven生命周期的阶段与插件的目标相互绑定,以完成某个具体的构件任务

内置绑定

maven为一些主要的生命周期阶段绑定了很多插件的目标。

生命周期阶段 插件目标
pre-clean
clean maven-clean-plugin:clean
post-clean
-------------- --------------
pre-site
site maven-site-plugin:site
post-site
site-deploy maven-site-plugin:deploy

相对于clean和site生命周期来说,default生命周期与插件目标的绑定关系就显得复杂一些。default生命周期的阶段是插件目标的绑定关系由项目打包类型(jar、war、pom等)所决定

常见的打包类型有jar、war、pom、maven-plugin、ear等,它们的default生命周期与插件目标的绑定关系请阅读官方文档,也可以从maven的命令行输出中看到项目构建过程执行了哪些插件目标。

自定义绑定

一个常见的例子是创建项目的源码jar包,内置的插件绑定没有涉及这一任务,需要用户自行配置。maven-source-plugin:jar-no-fork目标可以帮助我们完成。

<!-- 构建插件的基本配置 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <!-- 指定生命周期阶段 -->
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

有时候不通过phase元素配置生命周期阶段,插件目标也能绑定到生命周期中。是因为插件的目标在编写时就定义了默认的绑定阶段。

如果多个目标绑定到同一阶段,会按照这些插件声明的先后顺序执行。

插件配置

用户可以配置插件目标的参数,进一步调整插件目标所执行的任务。可以通过命令行和pom配置等方式来配置这些参数。

获取插件

基本上所有主要的maven插件都来自apache和codehaus。apache的更稳定些。

插件仓库

与依赖构件一样,插件构件同样基于坐标存储在maven仓库中。

解析插件前缀

maven-clean-plugin可以简写为clean。maven-compiler-plugin可以简写为compiler。

插件前缀与groupId:artifactId是一一对应的,这种匹配关系存储在仓库元数据中。这里的元数据为groupId/maven-metadata.xml,这个groupId是指插件仓库对应的groupId,如前文所述的apache(http://repo1.maven.org/maven2/org/apache/maven/plugins/)和codehaus(...)。也可以通过settings.xml让maven检查其他groupId上的插件仓库元数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容