文章目录
1.maven是什么
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
- POM(Project Object Model):项目对象模型
2.maven的作用
项目构建
:提供标准的、跨平台的自动化项目构建方式依赖管理
:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题统一开发结构
:提供标准的、统一的项目结构
src/main/java
:java源码src/main/resources
:项目相关的配置文件(mybatis配置,xml映射配置,自定义配置文件)src/test/java
:测试代码src/test/resources
:测试相关配置文件
3.maven的下载与安装
3.1maven配置
-
maven的运行依赖于Java,首先要配置好JAVA_HOME
-
配置
MAVEN_HOME
-
测试配置结果:
mvn -v
(查看版本)
4.maven基础概念
4.1 仓库
- 概念:用于存储资源,包含各种jar包
- 仓库的分类:
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
- 私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar
- 中央仓库中的jar都是开源的,不能存储具有版权的资源
- 一定范围内共享资源,仅对内部开放,不对外共享
- 保存具有版权的资源,包含购买或自主研发的jar
4.2坐标
- 什么是坐标:Maven中的坐标用于描述仓库中
资源的位置
,使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成groupld
:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)artifactld
:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)version
:定义当前项目版本号packaging
:定义资源的打包方式,取值一般有如下三种:jar/war/pom
<?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">
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--打包方式 web工程打包为war java工程打包为jar-->
<packaging>war</packaging>
<!--组织id-->
<groupId>com.itheima</groupId>
<!--项目id-->
<artifactId>web01</artifactId>
<!--组织id release代表完成版,SNAPSHOT代表开发版-->
<version>1.0-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
<dependencies>
<!--具体的依赖-->
<dependency>
</dependency>
</dependencies>
</project>
4.3 本地仓库配置(资源到哪里去)
在setting.xml
中配置localRepository
<localRepository>D:\maven\repository</localRepository>
4.4 配置阿里云仓库(资源从哪里来)
<mirrors>
<!--配置具体仓库的下载镜像-->
<mirror>
<!--此镜像的唯一标识符,用来区分不同的mirror元素-->
<id>nexus-aliyun</id>
<!--用来替代那个仓库,此处为中心仓库-->
<mirrorOf>central</mirrorOf>
<!--镜像名字-->
<name>Nexus aliyun</name>
<!--镜像的URL-->
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
5.手工创建maven项目
- 创建maven工程目录结构
- 编写java源码
//Demo.java
package com.zhxd;
public class Demo {
public String Say(String name) {
System.out.println("Hello " + name);
return "Hello " + name;
}
}
- 编写测试代码
package com.zhxd;
import org.junit.Test;
import org.junit.Assert;
public class TestDemo {
@Test
public void TestSay() {
Demo d = new Demo();
String ret = d.Say("maven");
Assert.assertEquals("Hello maven", ret);
}
}
- 在src同层目录下创建
pom.xml
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zhxd</groupId>
<artifactId>project-java</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
- maven构建的命令
- mvn compile:编译
- mvn test:测试
- mvn clean:清理(compile之后会生成target目录,clean可以把target删除)
- mvn package:打包(把项目打包成jar/war/pom)
- mvn install:安装到本地仓库
6.IDEA创建Maven工程
- IDEA配置maven:在setting中搜寻
maven
进行配置
- 创建普通maven项目
- 创建maven web项目
- maven插件配置tomcat
maven仓库
搜索maven tomcat
配置pom.xml
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<name>web01</name>
<groupId>com.zhxd</groupId>
<artifactId>web01</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
<dependencies>
</dependencies>
</project>
启动项目:
7.Maven依赖管理
- 依赖指当前项目运行所需要的jar包
- 格式
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
- 依赖管理
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源
- 依赖具有传递性
- 依赖传递冲突的三种优先法则
- 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,反之则越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的
- 特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的
- 可选依赖:可选依赖指的是对外隐藏当前所依赖的资源(不透明),设置标签
<optional>true</optional>
<dependencies>
<dependency>
<groupId>Junit</groupId>
<artifactId>Junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
</dependencies>
- 排除依赖:排除依赖指主动断开依赖的资源,被排除的资源无需指定版本(不需要)
<dependencies>
<dependency>
<groupId>Junit</groupId>
<artifactId>Junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</dependency>
</dependencies>
- 依赖范围
-
依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围
-
这里的范围主要是指以下三种范围
-
主程序范围有效(src/main目录范围内)
-
测试程序范围内有效(src/test目录范围内)
-
是否参与打包(package指令范围内)
-
scope标签的取值有四种:
compile/test/provided/runtime
-
-