Maven 学习笔记(一) :Maven的生命周期和插件

Maven 生命周期

Maven拥有三套相互独立的生命周期,分别为clean、default和site。

每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期。

mvn [阶段名] [阶段名] [阶段名]

例:

mvn clean deploy site-deploy
  1. 执行clean生命周期中clean阶段及以上的所有阶段
  2. 然后执行default生命周期中deploy阶段及以上的所有阶段
  3. 最后执行site生命周期中site-deploy阶段及以上的所有阶段

clean 生命周期

阶段 处理的任务 描述
pre-clean 执行一些清理前需要完成的工作
clean 清理上一次构建生成的文件
post-clean 执行一些清理后需要完成的工作

default 生命周期

default生命周期定义了真正构建时所需要执行的步骤,它是所有生命周期中最核心的部分

阶段 处理的任务 描述
valivate
initialize
generate-sources
process-resources准备资源 复制资源文件 资源文件如何复制可以在此阶段定制,一般来说,是将src/main/resources目录的内容进行变量替换工作后,赋值到项目输出的主classpath目录中
compile编译 编译 源代码编译在此阶段完成,编译Java文件到项目输出的主classpath目录中
generate-test-recources
process-test-resources
test-compile
test 使用单元测试框架运行测试 测试代码不会被打包或部署
package打包 打包 此阶段按照pom.xml的设置创建JAR或者WAR包
install安装 安装 将包安装到本地仓库,供本地其它Maven项目使用
deploy 部署 将最终的包复制到远程仓库,供其它来发人员和Maven项目使用

site 生命周期

阶段 处理的任务 描述
pre-site
site 生成项目站点文档
post-site
site-deploy 将生成的项目站点发布到服务器上

Maven 插件

Maven实际上是一个执行插件的框架,其所有的任务其实都是有插件完成。这种思想与涉及模式中的模板方法非常相似,模板方法模式在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为,这样既保证了算法有足够的可扩展性,又能够严格控制算法的整体结构。

Maven插件通常用于:

  • 生成jar包文件
  • 生成war包文件
  • 编译源码文件
  • 代码单元测试
  • 生成项目报告

一个插件通常提供一系列的目标操作,并且目标操作可以通过以下格式命令执行:

mvn [插件名]:[目标操作名]

插件绑定

Maven的生命周期的阶段与插件相互绑定,用以完成实际的构建任务。例如,项目编译这一任务,它对应了default生命周期的compile阶段,而maven-compile-plugin这一插件的compile目标能够完成该任务,于是就它们绑定。

内置插件

Maven为一些主要的生命周期阶段绑定了很多插件的目标,当用户通过命令行调用生命周期阶段时,对应的内置插件目标就会执行相应的任务。

clean生命周期内置插件

default生命周期内置插件

site生命周期内置插件

自定义绑定

除了内置绑定之外,还可以自己选择某个插件目标绑定到生命周期的某个阶段上。

例:使用maven-source-plugin插件的jar-no-fork目标将项目的主代码打包成jar文件,将其绑定到default生命周期的verify阶段上,在执行完集成测试后和安装构件之前创建源码jar包。

<build>
    <plugins>
        <plugin>
            <groupId>org.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>

插件配置

命令行插件配置

很多插件目标的参数都支持从命令行配置,用户可以在Maven命令中使用-D参数,并伴随一个参数键=参数值的形式,来配置插件目标的参数。

例如:maven-surefire-plugin提供了一个maven.test.skip参数,当其值为true的时候就会跳过执行测试

mvn install -Dmaven.test.skip=true

POM中插件全局配置

例:配置maven-compiler-plugin告诉它编译Java1.5版本的源文件,生成与JVM1.5兼容的字节码文件。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
    </plugins>
</build>

POM中插件任务配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>21.3</version>
            <executions>
                <execution>
                    <id>ant-validate</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <echo>I`m bound to validate phase.</echo>
                        </tasks>
                    </configuration>
                </execution>
                <execution>
                    <id>ant-verify</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <echo>I`m bound to validate phase.</echo>
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

猜你喜欢

转载自blog.csdn.net/aimomo007/article/details/80564895