Java安全
Java 基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
01反射
02反序列化
03JVM
04JDBC
05RMI
06JRMP
07JNDI
08CDI
09JPA
10Servlet
11Filter
12MVC模型
13MVC框架
14类的加载机制
15Maven
16注解
17ORM
18CC链
19JNDI注入
Log4j2
-
+
首页
15Maven
Maven 是 Java 生态中最主流的项目构建和依赖管理工具,由 Apache 软件基金会开发。它通过标准化的项目结构、自动化的构建流程和集中式的依赖管理,解决了传统 Java 开发中 “jar 包混乱、构建步骤繁琐、项目结构不统一” 等问题,大幅提升了开发效率和团队协作能力。 ## 作用 ### 依赖管理(Dependency Management) 传统开发中,需要手动下载 jar 包(如spring-core.jar、mysql-connector.jar),并手动添加到项目中,容易出现 “版本冲突”“缺失依赖” 等问题。 Maven 通过 “坐标”(唯一标识一个 jar 包)自动管理依赖: - 开发者只需在配置文件中声明依赖的坐标,Maven 会自动从远程仓库下载 jar 包,并放入本地仓库; - 自动处理 “依赖传递”(如引入spring-webmvc会自动下载其依赖的spring-core、spring-beans等); - 提供依赖调解机制,解决多版本冲突(如默认选择 “路径最近” 或 “声明优先” 的版本)。 ### 标准化项目结构 不同开发者可能习惯不同的项目目录结构(如 “src” 放源码还是 “java” 放源码),导致团队协作时难以统一。 Maven 定义了强制的项目结构标准,所有 Maven 项目的目录结构完全一致,开发者无需关心 “文件该放哪里”: ```text 项目根目录 ├── pom.xml // Maven核心配置文件(必选) ├── src │ ├── main // 主程序代码(必选) │ │ ├── java // Java源代码(如com/example/User.java) │ │ └── resources // 资源文件(如配置文件、XML、图片等) │ └── test // 测试代码(可选) │ ├── java // 测试源代码(如com/example/UserTest.java) │ └── resources // 测试资源文件 └── target // 构建输出目录(自动生成,如class文件、jar包) ``` ### 自动化构建流程 传统开发中,编译、测试、打包、部署等步骤需要手动执行(如javac编译、jar打包),步骤繁琐且易出错。Maven 将构建流程抽象为标准化的生命周期,通过简单的命令即可自动执行一系列步骤(如mvn package自动完成 “编译→测试→打包”),无需手动干预。 ## 核心概念 ### POM 文件(pom.xml) POM(Project Object Model,项目对象模型)是 Maven 项目的核心配置文件,位于项目根目录,包含项目的所有元信息(如名称、版本、依赖、插件等)。 一个简单的pom.xml示例: ```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/xsd/maven-4.0.0.xsd"> <!-- 模型版本(固定为4.0.0) --> <modelVersion>4.0.0</modelVersion> <!-- 项目坐标(唯一标识项目) --> <groupId>com.example</groupId> <!-- 组织/公司标识(如公司域名倒写) --> <artifactId>my-project</artifactId> <!-- 项目名称(唯一) --> <version>1.0.0</version> <!-- 版本号 --> <name>My First Maven Project</name> <!-- 项目名称(可选) --> <!-- 依赖列表 --> <dependencies> <!-- 引入Spring Core依赖 --> <dependency> <groupId>org.springframework</groupId> <!-- 依赖的组织标识 --> <artifactId>spring-core</artifactId> <!-- 依赖的项目名称 --> <version>5.3.20</version> <!-- 依赖的版本号 --> </dependency> <!-- 引入JUnit测试依赖(仅测试时生效) --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> <!-- 依赖范围:test表示仅在测试阶段使用 --> </dependency> </dependencies> </project> ``` ### 仓库(Repository) 仓库是 Maven 存储 jar 包的地方,分为三类: | 仓库类型 | 作用 | 位置示例 | | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | 本地仓库 | 缓存从远程仓库下载的 jar 包,项目优先从本地仓库获取依赖(避免重复下载)。 | 默认为用户目录下的.m2/repository(如C:\Users\用户名\.m2\repository)。 | | 远程仓库 | 团队内部或公司共享的仓库(如 Nexus),存储私有 jar 包(如公司内部开发的组件)。 | `http://localhost:8081/nexus/content/repositories/internal/` | | 中央仓库 | Maven 官方维护的公共仓库,包含几乎所有开源 jar 包(默认配置,无需手动添加)。 | `https://repo.maven.apache.org/maven2/` | 依赖查找顺序:本地仓库 → 远程仓库(若配置) → 中央仓库。 ### 生命周期(Lifecycle) Maven 将项目构建过程拆分为标准化的生命周期,每个生命周期包含一系列 “阶段”(Phase),阶段按顺序执行(执行后面的阶段会自动触发前面的所有阶段)。 核心生命周期有三个: | 生命周期 | 作用 | 核心阶段(按执行顺序) | | --------------- | ------------------ | ------------------------------------------------------------ | | clean | 清理构建产物 | clean:删除target目录(构建输出)。 | | default(核心) | 项目构建的核心流程 | compile:编译src/main/java的源代码;test:运行src/test/java的测试用例;package:将编译后的代码打包(如 jar、war);install:将包安装到本地仓库(供其他项目依赖);deploy:将包部署到远程仓库(供团队共享)。 | | site | 生成项目文档 | site:生成项目站点文档(如 API 文档、测试报告);site-deploy:部署文档到远程服务器。 | ### 依赖范围(Scope) 依赖范围控制依赖在哪些生命周期阶段生效(如测试阶段是否可用、运行时是否需要打包),常用范围: | 范围 | 编译期 | 测试期 | 运行期 | 打包时是否包含 | 典型场景 | | -------- | ------ | ------ | ------ | -------------- | --------------------------------------------------------- | | compile | ✅ | ✅ | ✅ | ✅ | 核心依赖(如spring-core)。 | | test | ❌ | ✅ | ❌ | ❌ | 测试依赖(如junit)。 | | provided | ✅ | ✅ | ❌ | ❌ | 容器已提供的依赖(如servlet-api,Tomcat 已包含)。 | | runtime | ❌ | ✅ | ✅ | ✅ | 运行时依赖(如mysql-connector,编译时无需,运行时需要)。 | ### 插件(Plugin) Maven 的所有构建任务(如编译、测试、打包)都由插件执行,插件是 Maven 的 “工具”。例如: - maven-compiler-plugin:负责 Java 代码编译(指定 JDK 版本); - maven-surefire-plugin:负责运行 JUnit 测试; - maven-jar-plugin:负责将项目打包为 jar 包。 插件配置通常放在pom.xml的\<build>\<plugins>中,例如指定编译的 JDK 版本: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 源代码兼容JDK 1.8 --> <target>1.8</target> <!-- 编译后的class兼容JDK 1.8 --> </configuration> </plugin> </plugins> </build> ``` ## 常用命令 通过命令行或 IDE(如 IDEA、Eclipse)的 Maven 插件执行,常用命令: | 命令 | 作用 | | --------------- | ------------------------------------------------------------ | | mvn clean | 执行clean生命周期的clean阶段:删除target目录。 | | mvn compile | 执行default生命周期的compile阶段:编译src/main/java源代码(输出到target/classes)。 | | mvn test | 执行default生命周期到test阶段:编译并运行src/test/java的测试用例(输出测试报告到target/surefire-reports)。 | | mvn package | 执行default生命周期到package阶段:编译→测试→打包(输出 jar/war 到target目录)。 | | mvn install | 执行default生命周期到install阶段:打包后,将包安装到本地仓库(供其他项目依赖)。 | | mvn deploy | 执行default生命周期到deploy阶段:将包部署到远程仓库(需配置远程仓库地址)。 | | mvn help:system | 查看 Maven 环境变量(验证 Maven 是否安装成功)。 |
毛林
2025年10月27日 20:56
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码