一、概念
1、什么是Maven
Maven
的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(pom)
2、Maven的作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式。
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题。
- 统一开发结构:提供标准的、统一的项目结构
3、仓库
用于存储资源,包含各种jar包
- 仓库分类:
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:非自己电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
- 私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar
- 中央仓库中的jar都是开源的,不能存储具有版权的资源
- 一定范围内共享资源,仅对内部开放,不对外共享
- 保存具有版权的资源,包含购买或自主研发的jar
4、坐标
Maven中的坐标用于描述仓库中的资源位置,https://repo1.maven.org/maven2
作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
主要组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如:CRM、SMS)
- version:定义当前项目版本
- packaging:定义该项目的打包方式
二、配置
1、配置本地仓库地址
默认地址为:${user.home}/.m2/repository
个人比较喜欢把仓库地址设置为maven解压包中,maven为绿色软件,解压后可以直接使用
打开apache-maven-3.6.1/conf/settings.xml
把上面的<localRepository>/path/to/local/repo</localRepository>
移动到注释外
修改为 <localRepository>C:\maven\apache-maven-3.6.1\repository</localRepository>
2、配置远程仓库地址
maven的中央仓库下载的速度慢,使用阿里云的镜像加速下载
<mirrors>
<!-- 配置具体的仓库的下载镜像 -->
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
<id>alimaven</id>
<!-- 对哪个仓库进行镜像,简单说就是替代哪个仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称-非必要 -->
<name>aliyun maven</name>
<!-- 镜像URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
3、修改Setting.xml使全局默认使用jdk8
在
idea
中,有些项目会默认是用jdk5什么的,不支持jdk8的版本,每次都需要自己手动设置
在setting.xml中,找到<profiles></profiles>
标签,加入下列代码
<!-- 全局设置默认jdk8 -->
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
三、使用
1、使用tomcat插件启动war项目
使用意义不大。。。
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<!-- 省略其他配置 .... -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<!-- 默认访问路径:localhost:8080/<artifactId> -->
<!-- <configuration>-->
<!-- <port>80</port>-->
<!-- <path>/</path>-->
<!-- </configuration> -->
</plugin>
<!-- 下面这个,插件一直是红色的波浪线,使用不了 -->
<!-- <plugin> -->
<!-- <groupId>org.apache.tomcat.maven</groupId> -->
<!-- <artifactId>common-tomcat-maven-plugin</artifactId> -->
<!-- <version>2.1</version> -->
<!-- </plugin> -->
</plugins>
</build>
</project>
2、依赖管理
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tzcxyh</groupId>
<artifactId>learn-group</artifactId>
<version>1.0.0</version>
<!-- 依赖管理 -->
<dependencies>
<!-- 引入具体依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- 依赖传递(依赖具有传递性)
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系(
通过<dependency>标签
) - 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系(
learn-group
直接依赖了junit
、learn-group
间接依赖了 hamcrest-core
、
junit
直接依赖了hamcrest-core
。依赖是一个相对概念
- 依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
- 可选依赖:对外隐藏当前所依赖的资源(不透明、外部不可使用)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<!-- 设置为true表示对外隐藏 -->
<optional>true</optional>
</dependency>
- 排除依赖:主动断开依赖的资源,被排除的依赖无需指定版本
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
标签:maven,依赖,--,Maven,仓库,集锦,资源
From: https://www.cnblogs.com/lulu-buding/p/17631574.html