毕业一年了,干的比较杂。刚开始实习的时候接触maven,正式工作后写了一段时间c++。最近公司又开始推spring boot微服务框架。终于抽时间学习了一下Maven.
1.maven是什么?
Maven是帮助我们构建构成的,所谓构建就是编译、编写测试单元、打包、部署等操作。
相当于C++的Makefile ,Makefile就是专门用户编译C++程序的。
Maven还为java开发者提供了一个中央仓库,里面存放了大量的公共jar包。
2.pom的构成标签介绍
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>myMavenWeb</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>myMavenWeb Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>myMavenWeb</finalName>
</build>
</project>
project是所有的pom.xml的根元素
modeVersion指定了当前pom模型的版本是4.0.0
坐标信息:
groupId主项目标识 规定了项目属于哪个组 com.test指公司项目名称后面是工程名
artifactId定义了当前maven项目在组中的唯一id
version是当前项目的版本
<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--打包方式 -->
<packaging>war</packaging>
<!--第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
0.0.1
snapshot 快照
alpha内部公测
beta公测
Release稳定
GA正式
-->
<version>1.0-SNAPSHOT</version>
<!--项目地址-->
<url></url>
<!--项目信息-->
<description></description>
<!--依赖项-->
<dependencies>
<dependency>
<!--依赖插件的坐标 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!--依赖范围-->
<scope>
test 测试的时候有效
compile 默认的范围 编译测试运行都有效
provided 在编译和测试的时候有效
runtime 在测试和运行的时候有效
system 与本机的系统相关联,可移植性差
import 导入的范围他只是用在dependencyManagement中,表示从其他的pom中导入dependency的配置
</scope>
<!--依赖是否可选 -->
<optional>true/false</optional>
<!--排除依赖的列表 -->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖管理 这里声明的依赖并不会被运行用于在父模块中声明,供子模块继承-->
<dependencyManager>
<dependencies>
<dependency>
</dependency>
</dependencies>
</dependencyManager>
<!-- 为构建行为提供支持-->
<build>
<!--插件列表 -->
<plugins>
<plugin>
<groupid></groupid>
<artifactid></artifactid>
<version></version>
</plugin>
</plugins>
</build>
<!--子模块中用于对父模块是继承 -->
<parent></parent>
<!-- 聚合运行多个的maven项-->
<modules>
<module>
</module>
</modules>
3.依赖的传递
A->B->C->F(jar)
A->D->F(jar)
则解析的时候A依赖F走最短路径
4.依赖的聚合-----同时编译多个项目,并且可以打包到本地仓库
<modules>
<module>
这里存放不同项目的坐标
</module>
<module>
......
</module>
</modules>
5.maven的常用命令
mvn compile 编译
mvn clean 删除上次编译生成的目标文件 target
mvn install 把类打包到本地maven类库,然后在pom中引用地址就可以在新的类中直接使用而不用倒jar包
在运行install之前需要先运行clean package把项目打包然后安装到本地仓库