Maven学习笔记
Maven简介
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven可以很好的管理项目中的第三方jar包,避免冲突,一键配置(关于jar包和classpath看另一篇博客)。
代码:https://github.com/ShiyuLiuColumbia/MavenStudy
Maven的目录结构
代码见maven01
-src
-main
-java
-packages(这里存放程序的java源码)
-test
-java
-packages(这里存放测试的java源码)
resource
-pom.xml
pom.xml即存储了这个java项目的各种信息,包括所在的package名称,项目名称,所用到的依赖等等,maven根据pom.xml使用maven命令管理我们的java项目。
Maven基础知识
Maven主要命令
mvn compile 编译maven项目中主程序的源码,生成target目录,里面存放着源码编译成的.class文件以及测试报告
mvn test 测试
mvn package 打包成jar包
mvn clean 删除target目录
mvn install 安装jar包到本地仓库中mvn install例子
代码见maven02
如果我们想要在maven02工程中使用上面例子中的maven01 package,需要先将maven01打包成jar包,然后将该jar包安装到本地仓库中(mvn install)。然后再将maven01的依赖写入maven02的pom文件即可。maven中的坐标与仓库
坐标:groupId+artifactId+version
仓库:本地仓库和远程仓库,maven根据坐标在仓库中查找依赖的jar包maven生命周期:
https://www.liaoxuefeng.com/wiki/1252599548343744/1309301196980257
clean:清理项目
default:构建项目
site:生成项目站点maven插件
https://www.liaoxuefeng.com/wiki/1252599548343744/1309301217951777pom.xml中常见元素解析
<modelVersion>4.0.0</modelVersion> //当前pom版本
<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>0.0.1</version>
<packaging></packaging> //项目打包方式,默认是jar,也可以是war,zip,pom
<name></name> //项目描述名
<url></url> //项目地址
<description></description> //项目描述
<developers></developers>
<licenses><licenses>
<dependencies>
<dependency>
<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>0.0.1</version>
<type></type>
<scope>test</scope> //依赖范围,比如这里这个依赖只在测试阶段有用
<optional></optional> //设置依赖是否可选,默认false
<exclusions> //排除依赖列表
<exclusion>
<exclusion>
<exclusions>
</dependency>
</dependencies>
<dependencyManagement> //另一在父模块中,用于子模块继承,但是这之中的依赖不会被使用
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>0.0.1</version>
</plugin>
</plugins>
</build>
<parent></parent>
<modules></modules>
maven依赖范围
Dependency scope is used to limit the transitivity of a dependency, and also to affect the classpath used for various build tasks.
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
默认的依赖范围是compile,对编译,测试,运行三种阶段的classpath均有效maven依赖传递与依赖冲突
maven的依赖是逐步传递的
如何某个依赖多次被使用,那么依据1.短路优先 2.若路径长度相同,谁先出现使用谁