maven
1.maven入门
1.1、Maven 简介
Maven 是一个 java 项目管理工具和自动化构建工具,还可进行 jar 包依赖管理。
Maven 官网:https://maven.apache.org/
1.2、Maven 的安装
第一步:解压 maven 到指定的目录[无中文、无空格、无特殊字符目录
第二步:配置 maven 的环境变量
第三步:在 cmd 命令行通过 mvn -v 检查 maven 是否安装成功
1.3、配置 Maven 的阿里镜像
配置:maven 安装目录/conf/settings.xml
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>
http://maven.aliyun.com/nexus/content/groups/public
</url>
</mirror>
2.Maven 依赖
2.1、Maven 的本地仓库
仓库[repository]:存放物品的容器
maven 的仓库:用来存放 jar 包的一个文件
maven 本地仓库[local repository]:在当前计算机上一个存放 jar 包的文件夹
maven 本地仓库默认配置:maven 安装目录/conf/settings.xml
Default: ${user.home}/.m2/repository
修改 maven 的本地仓库:
第一步:在其他盘(c盘)创建一个文件夹
第二步:maven安装目录/conf/settings.xml配置local repository标签指向新文件夹
2.2、Maven 仓库划分
maven 仓库分为:本地仓库、远程仓库
本地仓库[local repository]:在当前计算机上一个存放 jar 包的文件夹
远程仓库[remote repository]:不在当前计算机上一个存放 jar 包的文件夹
私服[nexus]:一般是在局域网中使用[公司内部]
中央仓库[central repository]:在美国,据说里面有几十亿个 jar 包
镜像仓库[mirror]:分布在七大州,各大互联网公司一般都会提供镜像服务。用
来分摊中央仓库压力、加快 jar 包的下载速度。
2.3、Maven 的坐标与依赖
一、Maven 坐标
平面坐标(x,y):用来确定平面中的一个点。
空间坐标(x,y,z):用来确定空间中的一个点。
Maven 的坐标:用来当前项目打成的 jar 包在本地仓库中的位置的。
简称GAV坐标
groupId: 公司域名反写 | 公司域名反写.项目名
artifactId: 项目名 | 项目名-模块名
version: 0.0.1.snapshot|1.0.0.RELEASE(默认值)
二、maven 的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
三、maven 的坐标与依赖的区别
Maven 的坐标:用来当前项目打成的 jar 包在本地仓库中的位置的。
maven 依赖:用来确定当前项目所需要的 jar 包在本地仓库中的位置
四、如何由 maven 的坐标与依赖去本地仓库找对应的 jar 包
jar 包所在的目录:groupId+artifactId+version
如:com/jdc/maven/Hello/0.0.1-SNAPSHOT
jar 包的名称:artifactId-version 如:Hello-0.0.1-SNAPSHOT.jar
四、Maven 项目的分类
jar 工程: 打成 jar 包,当当前项目被其它项目依赖的时候,就打成 jar 包
war 工程:打成 war 包, 当前项目需要部署到 tomcat 服务器时候打成 war
pom 工程:打成 pom 包,通常父工程和聚合工程会打成 pom 工程。
注:
maven中jar 包依赖:推荐地址:https://mvnrepository.com/
3、Maven 与 Idea 整合
3.1、解决控制台乱码问题
- 点击Help => Edit custom VM Options,在最后面添加
-Dfile.encoding=UTF-8 - 点击右上角 Edit Configurations,在tomcat配置中的 VM option中添加
-Dfile.encoding=UTF-8 - 在Startup/Connection选项卡的Run和Debug添加一个key为JAVA_TOOL_OPTIONS, value为
-Dfile.encoding=UTF-8的环境变量 - 保存后重启idea,可以发现控制台中文乱码显示正常了
3.2、Tomcat 插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- path标签设置项目名-->
<path>/ssm</path>
<!-- port标签设置端口号-->
<port>8888</port>
<!-- 该参数设置GET请求乱码问题 -->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
3.3、依赖具有传递性
传递的原则:
路径不同时,路径短者优先 路径相同时,先声明者优先
解决 Jar 包冲突的三种解决方案:
第一种:路径不同时,路径短者优先
第二种:路径相同时,先声明者优先
第三种:排除法
3.4、父工程
3.4.1、在子工程中引用父工程
<parent>
<!-- 父工程坐标 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<relativePath>从当前目录到父项目的pom.xml文件的相对路径 </relativePath>
</parent>
子工程的 groupId 和 version 如果和父工程重复则可以删除。
3.4.2、在父工程中管理依赖
将 parent 项目中的 dependencies 标签,用 dependencyManagement 标签括起来
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.4.3、父工程统一管理 jar 包版本问题
借助于 properties 标签,便于管理 jar 包版本信息,防止各个模板分别引入依赖造成版本不一致问题。比如:
@GetMapping 在 spring4.3.x 版本以下中没有,在 spring4.3.x 版本以后才出现,所以万一在某个模块中使用了 4.3.x 版本以下的 spring,那@GetMapping 注解是没法使用的。
父工程
<!-- 在properties标签内部可以设置jar包版本信息 -->
<properties>
<!-- 标签名可以随意写【见名知意】,值不是随便写的 -->
<junit.version>4.9</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 通过${}表达式引用上面properties中定义好的版本号信息-->
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
在子项目中重新指定需要的依赖,删除范围和版本号
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
3.5、聚合工程
聚合工程:必须打成 pom 包,聚合是用来管理其它工程的工程
<!-- 聚合工程是把其它工程当做一个模块管理的 -->
<modules>
<module>../app01/pom.xml</module>
<module>../app02/pom.xml</module>
<module>../app03/pom.xml</module>
</modules>
3.6、在同一个窗口创建父子工程的两种方式
第一种:先创建一个空工程,然后在空工程目录中创建父模块、子模块
第二种:先创建父工程,然后选中父工程,创建子模块。