maven介绍
maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理;
maven的两大核心:
- 依赖管理:对jar包管理过程;
- 项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署等一系列的操作都通过命令来实现
maven工程目录约定:
maven命令介绍
maven的生命周期为下(每一个都对应一个命令):
在maven中存在“三套”生命周期,每一套生命周期相互独立,互不影响。在一套生命周期内,执行后面的命令前面操作会自动执行:
- cleanLifeCycle:清理生命周期-------clean
- defaultLifeCycle:默认生命周期-------compile,test,package,install,deploy
- siteLifeCycle:站点生命周期-------site
1、clean
将项目根目录下target目录清理掉;
2、validate
确认项目正确并且所有必要的信息均可用。编译后的class文件为16进制文件,validate命令主要验证该16进制文件是否符合java文件的规范,例如:
- Class文件的前4个字节称为魔数(Magic Number),它是用来确定这个文件是否为一个Java虚拟机可以接受的Class文件,Class文件魔数的值为0xCAFEBABE。如果一个文件不是以0xCAFEBABE开头,那它就肯定不是Java Class文件。
- 紧接着魔数的四个字节是Class文件的版本号,第5个和第6个字节是次版本号(Minor Version),第7和第8个字节是主版本号(Major Version),版本号是用来区别当前的Class文件是否可以被执行,通常的版本是向下兼容的。
0X0034(对应十进制的52):JDK1.8
0X0033(对应十进制的51):JDK1.7
0X0032(对应十进制的50):JDK1.6
0X0031(对应十进制的49):JDK1.5
0X0030(对应十进制的48):JDK1.4
0X002F(对应十进制的47):JDK1.3
0X002E(对应十进制的46):JDK1.2
3、compile
将项目中.java文件编译为.class文件,生成位置为当前项目下的target目录:
4、test
将项目根目录下src/test/java目录下的单元测试类都会执行;
注意:单元测试类名有要求:XxxxTest.java
5、package
将项目打包,打包项目根目录下taget目录:
6、verify
官方文档上的解释:对集成测试的结果进行任何检查,以确保符合质量标准;
看不懂,而且自己也没用过,不知道是干啥的,就先这样吧!
7、install
install 安装指令,其做了两件事情:
- 将项目打包(jar/war),将打包结果放到项目下的 target 目录下(这步就是 package 的作用嘛);
- 同时将上述打包结果放到本地仓库的相应目录中,供其他项目或模块引用;
8、site
pom.xml添加如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.4</version>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.9</version>
</plugin>
</plugins>
</reporting>
执行mvn site命令完成:
index.html:
apidocs目录index.html:
testapidocs目录index.html:
9、deploy
将maven的web项目部署到远程服务器;
pom的dependencyManagement
Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
pom.xml文件中,jar的版本判断的两种途径:
1:如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version;
2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准;
dependencyManagement里只是声明依赖,并不实现引入!
//只是对版本进行管理,不会实际引入jar
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.7</version>
</dependency>
</dependencies>
</dependencyManagement>
//会实际下载jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>
原文:https://www.cnblogs.com/zhangmingcheng/p/10984036.html