1·maven的作用
(1 )如果项目过于庞大,不适合用package划分模块,借助maven可将一个项目划分为多个工程。
(2)将jar包放到一个仓库里(本地仓库)。jar包可用引用获得,不用粘贴复制。避免版本不一致的风险
(3) 将jar包之间的依赖关系,交予maven处理。
2使用maven的好处
(1)约定大于配置
使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。
(2) Mavend的每一个命令有一个生命周期,如install命令可从清理到部署(见3)
(3)处理jar包的依赖关系(pom.xml)
(4)输出我们需要的文件
3 maven项目的构建过程
(1)构建定义:把项目经过编译,并吧编译结果部署到服务器的整个过程。
maven把项目分为【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个周期
- 清理clean:将以前编译得到的旧文件class字节码文件删除
- 编译compile:将java源程序编译成class字节码文件
- 测试test:自动测试,自动调用junit程序
- 报告report:测试程序执行的结果
- 打包package:动态Web工程打War包,java工程打jar包
- 安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置
- 部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行
4 maven的命令
vn validate |
验证项目是否正确,以及所有为了完整构建必要的信息是否可用 |
mvn generate-sources |
生成所有需要包含在编译过程中的源代码 |
mvn process-sources |
处理源代码,比如过滤一些值 |
mvn generate-resources |
生成所有需要包含在打包过程中的资源文件 |
mvn process-resources |
复制并处理资源文件至目标目录,准备打包 |
mvn compile |
编译项目的源代码 |
mvn process-classes |
后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement) |
mvn generate-test-sources |
生成所有包含在测试编译过程中的测试源码 |
mvn process-test-sources |
处理测试源码,比如过滤一些值 |
mvn generate-test-resources |
生成测试需要的资源文件 |
mvn process-test-resources |
复制并处理测试资源文件至测试目标目录 |
mvn test-compile |
编译测试源码至测试目标目录 |
mvn test |
使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布 |
mvn prepare-package |
在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现) |
mvn package |
将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR |
mvn pre-integration-test |
执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境 |
mvn integration-test |
如果有必要的话,处理包并发布至集成测试可以运行的环境 |
mvn post-integration-test |
执行一些在集成测试运行之后需要的动作。如清理集成测试环境。 |
mvn verify |
执行所有检查,验证包是有效的,符合质量规范 |
mvn install |
安装包至本地仓库,以备本地的其它项目作为依赖使用 |
mvn deploy |
复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关) |
5 pom.xml
(1)加入依赖包
<dependency>标签最常用的四个属性标签:
groupId:项目组织唯一的标识符,实际对应JAVA的包的结构。
artifactId:项目唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
version:jar包的版本号。可以直接填版本数字,也可以在properties标签中设置属性值。
scope:jar包的作用范围。可以填写compile、runtime、test、system和provided。用来在编译、测试等场景下选择对应的classpath。
<scope>的属性及解释
1、compile,默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段。
2、provided,只在开发、测试阶段使用,目的是不让Servlet容器和你本地仓库的jar包冲突 。如servlet.jar。
3、runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
4、test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
5、system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
(2)插件的使用
插件:命令依赖于插件
插件的添加:添加Maven插件,可以在pom.xml文件中添加<plugin>标签。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
(其中,<configuration>标签用来配置插件的一些使用参数。)
6 pom.xml 标签详解
<project> pom文件的顶级节点
<modelVersion> object model版本,对Maven2和Maven3来说,只能是4.0.0
(maven项目)
<groupId> 项目创建组织的标识符,一般是域名的倒写
<artifactId> 定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目
<version> 当前项目的版本,SNAPSHOT,表示是快照版本,在开发中
<packaging> 打包的方式,有jar、war、ear等
(项目)
<name> 项目的名称
<url> 项目的地址
(属性)
<properties> 属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
(依赖的jar包)
<dependencies> 构建项目依赖的jar