Maven入门
什么是Maven
Maven
是一个跨平台的项目管理工具,主要用于基于Java
平台的项目构建,依赖管理。
maven之前的项目管理一般为 ant
。
Maven的作用
Maven
的出现时为了解决项目的一些问题:
- 如果有好几个项目,这好几个项目中,需要用到很多相同的jar包, 能不能只建立一个仓库来解决这个问题?
- 测试方法能不能全部运行呢?
- 怎么样把一个模块的功能放入到仓库中
Maven的安装和配置
Maven的安装
Jdk要求
jdk要求1.7+
下载Maven
从Maven官网上下载最新版本的Maven
设定环境变量
将下载好的Maven
的bin
追加到环境变量path
中。
检查Maven是否配置成功
在cmd中运行mvn -v
,当出现下面的提示证明配置正确
注意:要用管理员权限运行cmd,否则会报错
建库
Maven
的很大作用就是导入jar
包,所以我们建立一个仓库来放置项目所用的jar包,在需要的时候进行管理。
路径
Maven的仓库默认路径是C:\Users\UserName\.m2
,注:UserName为个人电脑名称
Maven的约定
路径 | 作用 |
---|---|
src/main/java | 存放项目的java文件 |
src/main/resources | 存放项目的资源文件,如spring,hibernate的配置文件 |
src/test/java | 存放所有的测试的java文件 |
src/test/resources | 存放测试用的资源文件 |
target | 项目输出位置 |
pom.xml | 文件 |
必须按照这个约定放置
Maven项目
知道了Maven的约定,那么我们就可以根据约定来进行创建第一个项目。
在HelloWorld.java
文件
|
|
HelloWorldTest.java
文件
|
|
pom.xml文件
|
|
在根目录下执行命令mvn compile
这样就会编译成功。
Maven构建命令
命令 | 作用 |
---|---|
mvn -v | 查看maven版本 |
compile | 编译 |
test | 测试 |
package | 打包 |
clean | 删除target |
install | 安装jar到本地仓库 |
Maven坐标
|
|
在Mevan中这三个就是基础坐标也是唯一的表示,可以快速定位到任何一个包
仓库
- 本地仓库
- 远程仓库
- 镜像仓库
如果Maven
在本地仓库找不到构建,那么就会去Maven
的中央仓库去寻找,如果Maven
的中央仓库没有,就会报错。因为Maven的远程仓库在国外,常常无法访问或者很慢,这是我们就要使用一些镜像仓库,来帮助我们。
在"~\apache-maven-3.3.9\conf\settings.xml"文件中,找到mirrors
,我们可以修改这里进行镜像设置。
中央仓库地址: http://repo.maven.apache.org/
pom.xml
project
是包含了pom的约束信息modelVersion
指定了当前pom的版本groupId
当前maven输入那个项目,包名+项目名artifactId
项目名+模块名version
版本号,第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号。snapshot
快照,alpha
内部测试版本,beta
公测版本,Relese
稳定版本,GA
正式发布版本。packaging
打包方式,默认为jar包,可以为war,zipname
项目描述url
项目地址,项目描述developers
开发人员信息licenses
许可信息organization
组织信息
|
|
Maven依赖
依赖范围
scope
控制依赖和三种classpath的关系。
三种classpath
- 编译
- 测试
- 运行
scope
一共有6个值分别为compile
,provided
,runtime
,test
,system
,import
。
名称 | 范围 |
---|---|
compile | 默认的范围,编译测试运行都要效。 |
provided | 在编译和测试有效,运行时无效。 |
runtime | 在测试和运行时有效 |
test | 仅仅在测试有效 |
system | 在本系统有效,移植性非常差 |
improt | 导入范围,它只是用在dependencyManagement中,表示从其他pom.xml继承的依赖。 |
依赖传递
例如MavenB
项目依赖MavenA
,而MavenC
依赖于MavenB
,这样的活那么MavenC
就会依赖于MavenA
。
依赖冲突
A和B依赖不同版本但是相同的构建,就会出现冲突。
处理原则:
- 断路优先 A->B -> C ->X(jar) A->D->X(jar) 会优先解析路径短的。
- 先声明先优先 如果两条路径一样,那么先声明的会先依赖。
Maven创建JavaWeb
- Maven
- IDEA
创建Maven项目,选择webapp
填写好 GroupId
和ArtifacetId
之后next。
这样我们就完成了一次创建。
因为只为我们创建了resource目录,按照Maven的约定,我们需要创建其他目录。