zoukankan      html  css  js  c++  java
  • maven生命周期与插件

    本文主要是针对《maven实战》书中关键知识点的学习记录,未免有纰漏或描述不到之处,建议购买阅读原书

    Maven生命周期

    maven拥有3套完全独立的周期,而并不是全都都是一起的(我当初就是这么以为...)
    三个独立的周期是clean、default和site,每个周期中,有不同的阶段(phrase),经常在一些插件的配置里可以看见,下面是对每个生命周期的简单介绍。

    clean

    • pre-clean 执行清理前需要完成的工作
    • clean 正式开始清理
    • post-clean 执行清理后的工作

    default

    default是maven生命周期中最复杂的,包含许多的部分,仅对其中一些重要的部分说明

    • validate
    • initialize
    • generate-sources
    • process-sources 处理项目的资源文件,一般来说是 src/main/resources目录的内容进行变量的替换
    • generate-resources
    • process-resources
    • compile 编译主项目的源代码
    • process-classes
    • generate-test-process
    • process-test-classes
    • generate-test-resources
    • process-test-resources
    • test-compile 编译项目测试代码src/test/java
    • process-test-classes
    • test
    • prepare-package
    • package
    • pre-integration-test
    • integration-test
    • post-integration-test
    • verify
    • install 将安装包存放到本地的maven库中
    • deploy 将最终的包复制到远程仓库,提供给他人使用

    site

    • pre-site
    • site 生成项目站点文档
    • post-site
    • site-deploy 将生成的项目暂定,发布到服务器上去

    命令与对应周期

    • mvn clean 对应clean周期的全部
    • mvn clean install 对应clean的全部周期,以及default中到install的部分
    • mvn clean deploy site-deploy 对应clean全部,default全部以及site的全部

    插件与绑定

    插件目标

    插件目标(goal),更像是插件自己内部定义的一些时期,或者说是功能模块。maven核心仅仅定义了抽象的生命周期,具体任务是交由插件完成的,插件按独立的形式存在
    例如maven-dependency-plugin,它能够对项目进行依赖分析,输出依赖树,输出已解析的依赖等等。这3个功能就使用到了analyze, tree, list 3个目标

    插件绑定

    maven生命周期与插件互相绑定,更具体的是,生命周期与插件目标的相互绑定。例如default中的compile这一阶段,对应了maven-compiler-plugin插件的compile.

    内置绑定

    为了在使用中不用任何配置就可以构建Maven项目,maven在核心为一些主要生命周期绑定了很多插件的目标
    例如在clean周期中的clean,绑定的是maven-clean-plugin:clean;
    site周期中的site是,maven-site-plugin:site;site-deploy绑定 maven-site-plugin:deploy
    至于default的,这比较的多,这个可以参考官网上的解释

    自定义绑定

    除了内置的绑定意外,用户还可以选择将某个插件目标绑定到生命周期的某个阶段上。比较常见的是如下这种代码配置

    <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>
    

    上面的声明中,除了基本的坐标声明外,还有插件的执行配置。其中一个id为attach-source的执行任务,将插件绑定到default的verify的生命周期上,通过goals配置要指定的执行的插件目标。

    有的插件及时不配置phase,插件目标也能绑定到生命周期中去,这是因为插件内部有默认的phase。

    插件配置

    经常使用的 mvn clean install -Dmaven.test.skip=true中的-D后面的一串,就是插件的配置,一般都是支持命令行与pom中配置参数的。但注意,并不是所有的插件都支持命令行配置参数,因此有的时候,需要再pom文件中进行配置了,下面这段也是很常见的一个pom中插件的配置

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

    除了向上面这种用的多的源码的输入输出,还有一种是任务的配置,类似如下

    			<configuration>
    				<tasks>
    					<echo>doing ...</echo>
    				</tasks>
    			</configuration>
    
  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/westlin/p/10988145.html
Copyright © 2011-2022 走看看