简介
maven是基于ant升级的,apache的自动化构建工具、项目管理工具
Maven – Welcome to Apache Maven
maven使用pom.xml进行配置
maven项目可以更方便的实现导jar包、拆分项目
idea默认集成了maven
下载安装
下载maven,在官网(Maven – Welcome to Apache Maven)
binary可以直接使用,source是带源码的
解压后,bin目录下方的是执行文件/命令
idea中可以直接集成maven(不用敲命令了)
本地仓库、远程仓库
远程仓库
默认的远程仓库是apache提供的中央仓库https://mvnrepository.com/
本地仓库路径配置
镜像仓库配置
仓库优先级:
本地 > 配置文件中指定的仓库 > 镜像仓库 > 中央仓库
指定编译运行的jdk
当idea中有多个jdk的时候,需要指定编译运行的jdk
maven项目类型
用maven构建项目,会有三种类型
pom
pom工程是逻辑工程,用在父级工程或者聚合工程中,用来做jar包的版本控制
<packaging>pom</packaging>
jar
打成jar包 java project
war
打成war包,发布在服务器上
项目坐标
GroupId:类似包名,防止重名,一般填写的是域名反转(eg:com.company)
ArtifactId:一般使用项目名
Version:版本,SNAPSHOT一般是非正式版本,上线后会去掉
maven项目标准目录结构
通过dependencies添加依赖
maven项目关系依赖具有传递性
项目1依赖项目2,项目2依赖项目3,那么项目1中可以世界使用项目3
原则
最短路径有限原则
A->B->C->D(2.0)
A->E->D(1.0)
那么D(1.0)会被使用,因为A通过E到D的路径更短
最先声明原则
依赖路径长度一样时,
A->B->D(2.0)
A->E->D(1.0)
A中先声明哪个,哪个版本最先使用
A中先声明B,那么使用D(2.0)
A中先声明E,那么使用D(1.0)
依赖范围scope
默认是编译和执行都有效compile
<scope>compile</scope>
provided
项目打包后不使用该依赖
编译运行时使用该依赖,然后项目打包后,依赖可能跟容器中的依赖冲突,此时用provided,直接使用容器的依赖(eg:servlet-api)
runtime
编译时不需要生效,运行时生效(eg:jdbc)
system
与provided类似,不过需要指定一个本地系统路径的jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>system</scope>
<systemPath>D:/mavenResp</systemPath>
</dependency>
test
编译测试、运行测试是需要,生成正式运行时不需要(eg:Junit)
import
值适用于pom文件中的dependencyManagement部分,表明子项目必须要使用dependencyManagement部分的依赖版本
排除依赖,不需要写version
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
父子工程
在子工程中添加
<parent>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
<relativePath>./pom.xml</relativePath>
</parent>
maven插件
配置maven的编译插件
将jdk的版本改为1.7
配置文件插件
默认情况下,只有resources目录下的配置文件会被打包
如果想要把其他目录下的配置文件也打包
tomcat插件
创建web(war)项目
配置Tomcat插件
使用tomcat插件发布部署并执行war工程的时候,需要使用启动命令:tomcat7:run
这样就可以启动项目了
maven命令
install
编译、打包,安装到本地仓库,也会有target目录
compile
只编译,相当于javac
package
编译、打包(不会把打包后的jar放到本地仓库中)
clean
清除