Maven是一个项目管理工具,可以对进行项目构建依赖管理

项目构建

指项目从开发到最终完成的过程:编译、测试、打包、部署上线

一、MAVEN目录结构

maven 配置test源码 maven的test_jvm


编写测试代码规则:

  1. 类名写成:XxxTest的形式,如:UserTest
  2. 方法名写成:testXxx()的形式,如:testLogin。方法的权限必须为public、返回值应当为void不能传入参数、必须有个注解@Test
二、Maven基本命令

Maven 将整个构建过程分为多个阶段,每个阶段对应 maven 中的一个命令。

maven 配置test源码 maven的test_maven_02


比如下面命令:

clean命令,对应的是上述的清理阶段,用于清除生成的 class 字节码文件

compile命令,对应上述的编译阶段,用于将 java 文件遵循一个原则编译成 class

字节码文件

test命令,测试项目 执行test目录下的测试用例

package命令,对应上述的编译阶段,用于将 java 打包成 jar 包或者 war 包


依赖管理

一、之前项目的痛点
  1. 需要频繁地去把每个应用所需要的包导入当前应用中
  2. 有些jar包的运行需要依赖其他包支撑

Maven可以极好地处理这些问题

二、设置国内镜像

也就是设置远程仓库。因为 maven 中央仓库位于国外,所以如果本地仓库没
有对应的 jar 包,那么需要从中央仓库去下载,速度比较慢。

复制如下代码到conf/settings.xml文件中的mirror结点中即可

<mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>central</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
三、设置本地仓库(可选)

在conf/settings.xml文件中的settings结点下设置

<localRepository>D:\repository</localRepository>

如果本地仓库已经有了对应的jar包,那么当你在加载某个类时,就不会再去远程仓库下载该jar包了。

四、依赖的格式

在pom.xml文件中设置项目的依赖

<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.cskaoyan.project</groupId> <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven 会将该项目打成的 jar 包放本地路径:
/com/companyname/project-group -->

<artifactId>hello</artifactId><!-- 项目的唯一 ID,一个 groupId 下面可能多个项目,就是靠 artifactId 来区分的 -->

<version>1.0</version> <!-- 版本号 -->
<dependencies>

<dependency> <!-- 依赖设置 -->

<groupId>junit</groupId> <!-- 依赖组织名称 -->

<artifactId>junit</artifactId> <!-- 依赖项目名称 -->

<version>4.12</version> <!-- 依赖版本名称 -->

<scope>test</scope> <!-- 依赖范围:test 包下依赖该设置 -->
</dependency>
</dependencies>
</project>

查找项目坐标:https://mvnrepository.com/

五、scope依赖范围

maven 配置test源码 maven的test_jvm_03

六、依赖传递

比如说:项目一依赖项目二(第一依赖),项目二依赖commons-fileupload(第二依赖),根据依赖的传递性,项目一也可以拿到commons-fileupload依赖。
如果第二依赖是test、provided,传递会断层

七、依赖冲突

比如项目引用了依赖 A,A 引用依赖 C(v1.1)
又引用了依赖 B,B引用依赖 C(v1.2)
原则:

  1. 第一声明者优先原则
  2. 路径近者优先原则
  3. 依赖排除(使用exclusion标签)
  4. 提取常量(全部采用同一个版本)