maven的简介和基本用法

1.maven的简介

maven是Apache一款优秀的开源产品,被广大java程序员所使用,maven能帮我们项目依赖,项目构建,和项目信息的管理。

1.1项目依赖

maven坐标可以确定一个构件(构件可以是,jar包,war包,插件等等)。
maven坐标由groupId,artifactId,version,packaging,classifier组成。
groupId:定义了项目输入哪个组,这个组往往和项目所在组织或公司管理,例如:com.google,org.springframework。
artifactId:定义了当前项目在maven组中的唯一id,一般一个项目下有多个模块,artifactId表示模块名,例如spring-core,spring-bean。
version:表示版本号,版本有稳定版本,和快照版本(快照版带后缀SNAPSHOT,属于不稳定版本,表示还在卡法中)
packageing:打包方式,默认为jar包,还有war,pom,maven-plugin等。
classifier:附属构件。

1.2项目构建

maven是一款优秀的构建工具,只需要输入简单的命令就可以帮助我们完成清理,编译,打包,部署,生成站点等操作。要了解项目构建就就必须的了解maven的生命周期,maven构建的生命周期由3套生命周期构成,clean,default,site,每个生命周期都包含若干个阶段。当我们输入命令时,该命令所在的那一套生命周期中的前面的步骤都会执行,
比如输入mvn clean install 对应2套生命周期,clean周期的pre-clean,和clean,default周期的install包括自己和前面的周期都会执行。

1.2.1 clean的生命周期

pre-clean:执行清理前需要完成的工作
clean:清理上一次的构建生成的文件
post-clean:清理后需要完成的工作

1.2.2 default 的生命周期

validate:验证操作

  1. initialize:初始化
  2. generate-source:
  3. process-sources:处理项目主资源文件。一般来说将src/main/resources目录的内容处理后,赋值到项目输出目录的classpath目录中
  4. generate-resources:
  5. process-resources:
  6. compile:一般来说,将src/main/java目录下的java文件编译后输出到classpath目录中
  7. process-classes:
  8. generate-test-sources:
  9. process-test-sources:一般来说将src/test/resources目录的内容处理后,赋值到test输出目录的classpath目录中
  10. generate-test-resources:
  11. process-test-resources:
  12. test-compile:编译项目的测试代码。
  13. process-test-classess :
  14. test:使用单元测试框架,运行测试结果
  15. prepare-package package:打包,如jar,war
  16. pre-integration-test
  17. integration-test
  18. post-integration-test
  19. verfiy:
  20. install:将包安装到maven本地仓库
  21. deploy:将包部署至远程仓库。

1.2.3 site 的生命周期

site生命周期的目的是建立和发布项目站点。maven恩呢该基于pom所包含的信息,自动生成一个友好的站点。

  1. pre-site
  2. site:生成项目站点文档
  3. post-site
  4. site-deploy:将生成的项目站点发布到服务器上

2.常用的maven命令

在maven项目根目录输入maven命令

  1. mvn clean:清理输出目录
  2. mvn compiler:对应前面的default生命周期的compile阶段,compiler阶段,及前面的阶段都会执行。
  3. mvn test:使用测试框架测试
  4. mvn package:打包
  5. mvn install:安装到本地仓库
  6. mvn deploy:部署至远程仓库
  7. mvn site-deploy:生成站点信息
    一般3套生命周期会被配合使用
    例如 mvn clean deploy site-deploy

3.maven的插件

maven内置了很多插件,构建的任务都是由插件完成的,构建的生命周期和插件的目标项目绑定。

3.1 clean的生命周期和插件目标的绑定

生命周期插件目标
pre-cleanmaven-clean-plugin:clean
cleanmaven-clean-plugin:clean
post-cleanmaven-clean-plugin:clean

3.2 default的生命周期和插件目标的绑定

生命周期插件目标作用
process-resourcesmaven-resources-plugin:resources复制主资源文件至主输出目录
compilermaven-compiler-plugin:compile编译主代码至输出目录
testmaven-surefire-plugin:test执行测试用例
packagemaven-jar-plugin:test创建项目jar包
installmaven-install-plugin:install安装至本地仓库
deploymaven-deploy-plugin:deploy部署构建至远程仓库

3.3 site的生命周期和插件目标的绑定

生命周期插件目标
pre-sitemaven-site-plugin:site
sitemaven-site-plugin:site
post-sitemaven-site-plugin:site
site-deploymaven-site-plugin:deploy

3.4 获取插件的帮助信息

除了查询文档之外,我们还可以借助maven-help-plugin 来获取插件的帮助信息。
用法:

mvn help:describe -Dplugin=groupId:artifactId:版本号

输入组件的坐标信息,以冒号分割
例如:获取编译插件的帮助信息。注意切勿输入不必要的空格,以免报错
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin:2.1
也可以不指定版本号:默认会搜索最新版本的插件
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
可以指定目标前缀,写法更简洁
mvn help:describe -Dplugin=compiler -Dgoal=compile -Ddetail
-Ddetail 表示查询更详细的信息。

3.5 显示依赖树

以树结构展示依赖的信息

mvn dependency:tree

3.6常用插件前缀

插件名前缀作用
maven-clean-pluginclean清理项目
maven-compiler-plugincompiler编译项目
maven-install-plugininstall安装项目
maven-deploy-plugindeploy部署项目
maven-resources-pluginresources处理资源
maven-surefire-pluginsurefire执行测试
maven-jar-pluginjar打jar包
maven-war-pluginwar打war包
maven-assembly-pluginassembly自定义格式分发包
maven-source-pluginsource生成源码包

查看插件前缀链接
http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-metadata.xml

4.maven属性

4.1 自定义属性

在pom文件中的properties中定义的属性,

<properties>  
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  </properties> 

在别的地方可以通过,${project.build.sourceEncoding}访问

4.2 java系统属性和环境变量属性

maven可以访问java系统属性,例如${user.home}指向用户目录。
环境变量属性:以env开头,例如${env.JAVA_HOME}指向javahome的环境变量。

4.3常用内置属性

  1. ${basedir}:项目的根目录
  2. ${version}:项目的根目录
  3. ${project.build.sourceDirectory}:项目的主源码目录 src/main/java
  4. ${project.build.directory}:项目构建输出目录,默认 target/
  5. ${project.outputDirectory}:项目主代码编译输出目录 默认target/classes/

版权声明:本文为lucky_ly原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。