1、基础
| * 坐标 |
| groupId 公司 |
| artifactId 项目 |
| version 版本 |
| - SNAPSHOT 快照(snapshot) |
| - RELEASE 发行(release) |
| packing 打包方式 |
| - jar |
| - war |
| - pom |
| |
| <dependency> |
| <groupId>mysql</groupId> |
| <artifactId>mysql-connector-java</artifactId> |
| <version>8.0.25</version> |
| </dependency> |
2、目录结构
| * pom.xml------------------------------------------------------------这是 maven 要使用的当前项目的配置文件 |
| * target ------------------------------------------------------------这是存储项目构建过程中产生的文件的(这个文件如果不存在会自动创建) |
| * src ------------------------------------------------------------这是项目的资源文件 |
| |--main --------------------------------------------------------这是当前项目的正式文件 |
| |-- java-----------------------------------------------存放的是正式的 java 文件 |
| |-- resources------------------------------------------存放的是正式的配置文件 |
| |-- webapp---------------------------------------------存放的是静态资源文件(image html css js jsp WEB-INF/web.xml) |
| |--test --------------------------------------------------------这是当前项目的测试文件 |
| |-- java-----------------------------------------------存放的是测试的 java 文件 |
| |-- resources------------------------------------------存放的是测试的配置文件(这个目录一般是没有的) |
| |
3、常见命令
| * mvn compile # 编译 -> 将 src/main/java 下的文件(正式的 java 文件)编译为 class 文件输出到 target 目录下 |
| * mvn clean # 清理 -> 删除 target 目录及内容,即清理掉上一次项目构建产生的文件 |
| * mvn test # 测试 -> 执行 src/test/java 下的测试类,并编译为 class 文件输出到 target 目录下 |
| * mvn package # 打包 -> 打的是所有的正式代码(src/main),对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包 |
| * mvn install # 安装到本地仓库 -> 将打好 jar 包或者 war 包安装到本地 maven 仓库 |
| * mvn deploy # 部署 -> 将打好的 jar 包或 war 包部署到私服中 |
4、生命周期
| * 位于同一生命周期中的命令,运行后面的命令,前面的会自动运行 |
| * maven 对项目构建过程分为三套相互独立的生命周期,每个生命周期中,都包含了不同的命令,这三套生命周期分别是 |
| Clean Lifecycle (清理 生命周期): 在进行真正的构建之前进行一些清理工作 |
| Default Lifecycle (默认 生命周期): 项目构建的核心部分,包括编译、测试、打包、安装、部署 |
| Site Lifecycle (站点 生命周期): 生成项目报告,站点,发布站点 |
| |
5、依赖范围
| * 项目中的 jar 包如果很多, 就可能出现 jar 包冲突 |
| * 比如: web 应用里有 servlet-api 的 jar 包,web 在 Tomcat 里运行也有 servlet-api 的 jar 包,那么在 Tomcat 启动时,就可能出现 jar 包冲突的 |
| * 为了避免这种情况的发生,Maven 为每个依赖提供了作用范围,即: 依赖范围 |
| * maven 支持的依赖范围主要有下面几种 |
| compile 默认依赖范围,作用域在编译、测试、运行时都有效 |
| test 作用域在测试时有效,编译和运行时不需要,比如: Junit |
| provided 作用域在编译、测试时有效, 运行时不需要,比如: servlet-api 被 tomcat 容器提供, servlet jsp |
| runtime 作用域在测试、运行时有效, 编译时不需要,比如: jdbc 的驱动包 |
| |

6、依赖冲突
最先声明原则:在 pom 文件定义依赖,以先声明的依赖为准
最短路径优先原则:从依赖程序开始算起,到被依赖的程序,以路径短的为准
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-context</artifactId> |
| <version>5.1.6.RELEASE</version> |
| |
| <exclusions> |
| <exclusion> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-core</artifactId> |
| </exclusion> |
| </exclusions> |
| </dependency> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步