前提
maven 使用的是约定大于配置的方式
约定大于配置 规则
- mvn clean compile 默认编译src/main/java下的文件
- mvn clean test 默认测试src/test/java下的文件 且测试的类名以Test开头 ,测试的方法名以test开头(且不能只为test)
- 引入junit 或其他测试框架后, 点2 对应的约定失效,测试由junit测试框架接管,需要符合junit测试类的规则
安装
-
解压到指定目录
-
配置环境变量
新建系统变量:MAVEN_HOME ,变量值:D:\apache-maven-3.6.0(解压的路径)
修改path 新建: %MAVEN_HOME%\bin
- 检查检查安装是否成功 mvn -version
C:\Users\23592>mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: F:\storage\maven\apache-maven-3.6.0\bin\..
Java version: 1.8.0_301, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_301\jre
Default locale: zh_CN, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
常用命令
mvn clean compile packge test install
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
依赖配置
依赖传播特性
项目中依赖第三方组件,而第三方依赖又会依赖其他组件,这时候maven会将依赖网络中所有的依赖都加入ClassPath中,这就是maven的依赖传播特性
依赖优先原则
- 最短路径优先
2.相同路径下 配置在前的优先
3. 同一个pom相同依赖不同版本,选择后面那个
如下会选择4.12版本
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
可选依赖
依赖不会被传递
<optional>true</optional>
排除依赖
使用exclusions排除依赖 可多个
<dependency>
<groupId>net.oneandone.ical4j</groupId>
<artifactId>ical4j</artifactId>
<version>2.0.4</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
支持以下四种依赖范围:
compile(默认):编译范围,编译和打包都会依赖。
provided: 提供范围,编译时依赖,但不会打包进去。如:servlet-api.jar
runtime: 运行时范围,打包时依赖,编译不会。如:mysql-connector-.java.jar
test: 测试范围,编译运行测试用例依赖,不会打包进去。如:junit.jar
system: 表示由系统中CLASSPATH:指定。编译时依赖,不会打包进去。配合一起使用。示例:java.home下的tool,jar
tips
maven依赖查找: https://mvnrepository.com/
查看项目依赖关系 ,idea 快捷键 ctrl+shift+alt+u 或点击