1.定义
** Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具**
-
1.构建 – Java 项目开发过程中,构建指的是使用『原材料生产产品』的过程,其步骤如下:
-
清理:删除上一次构建的结果,为下一次构建做好准备
-
编译:Java 源程序编译成 *.class 字节码文件
-
测试:运行提前准备好的测试程序
-
报告:针对刚才测试的结果生成一个全面的信息
-
打包:Java工程:jar包 ,Web工程:war包
-
安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库
-
部署:
-
部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
-
部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上
-
2.依赖
-
如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B
1、安装以及配置
这是 maven下载地址**
2、 解压Maven核心程序
核心程序压缩包:apache-maven-3.8.4-bin.zip,解压到非中文、没有空格的目录。例如:
在解压目录中,我们需要着重关注 Maven 的核心配置文件:conf/settings.xml
3、指定本地仓库
本地仓库默认值:用户家目录/.m2/repository,一般建议将 Maven 的本地仓库放在其他盘符下(放在C盘,随着jar越来越多电脑会卡)。配置方式如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\maven-repository</localRepository>
注意:本地仓库本身也需要使用一个非中文、没有空格的目录,一定要把 localRepository 标签从注释中拿出来。
4、配置阿里云提供的镜像仓库
①将原有的例子配置注释掉
<!-- <mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror> -->
②加入我们的配置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
5、配置 Maven 工程的基础 JDK 版本
<profile>
<id>jdk-1.8</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>
2、配置环境变量
1. 检查 JAVA_HOME 配置是否正确,因为Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。
可以使用下面的命令验证:
C:\Users\Administrator>echo %JAVA_HOME%
D:\software\Java
C:\Users\Administrator>java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
2. 配置 MAVEN_HOME。
配置环境变量的规律:
- XXX_HOME 通常指向的是 bin 目录的上一级
- PATH 指向的是 bin 目录
3. 验证是否按照完成 执行mvn -v命令。
C:\Users\Administrator>mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:\software\apache-maven-3.8.4
Java version: 1.8.0_141, vendor: Oracle Corporation, runtime: D:\software\Java\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
6、Maven 核心概念
1.坐标
- groupId:公司或组织的 id,通常也会加上项目名称
- artifactId:一个项目或者是项目中的一个模块的 id
- version:版本号
2.POM
POM:Project Object Model,项目对象模型。和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现,对应maven工程中根目录下 pom.xml 这个配置文件。
2.约定目录结构
约定目录结构的意义
Maven 为了让构建过程能够尽可能自动化完成,所以必须约定目录结构的作用。例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录。
约定大于配置
Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦。
7、Maven 常用命令
mvn archetype:generate -DarchetypeGroupId=com.uicsoft.xpf -DarchetypeArtifactId=use-study -DarchetypeVersion=1.4 – 使用命令指定坐标生成Maven工程
- mvn archetype:generate – 使用命令生成Maven工程
- mvn clean --清理操作 就是 删除 target 目录
- mvn compile --主程序编译,将java程序编译成.class文件,完成之后放在target/classes目录下
- mvn test-compile --测试程序编译,完成之后放在target/test-classes目录下
- mvn test --测试的报告存放的目录:target/surefire-reports
- mvn package --打包成jar 包(或war包),存放的目录:target
- mvn install --安装 是将本地构建过程中生成的 jar 包存入 Maven 本地仓库
8、Maven 依赖传递与排除
- 依赖:在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围,只有使用 compile 范围:可以传递, test 或 provided 范围不予传递,注意一点:防止循环依赖
- 排除:阻止某些 jar 包的传递,放在jar冲突,用标签 不需要写version 如下图所示
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
<!-- 在exclude标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>