本文发表于 455 天前,其中的信息可能已经事过境迁
文章摘要 摘要
加载中...|
Maven 从入门到精通全攻略
一、Maven 简介
Maven 是一款强大的项目管理和构建工具,在 Java 项目开发中占据关键地位,也为其他语言项目构建与依赖管理提供支持。其核心在于通过 pom.xml(Project Object Model)文件对项目构建流程、报告生成及文档管理等进行高效规范管控,提升开发效率,降低环境差异和依赖问题导致的错误风险。
a84963df-c7fc-4e02-9681-455501ed4824_0.png
二、安装配置
Windows 系统
- 下载:访问 Maven 官方网站(https://maven.apache.org/),下载适用于 Windows 的二进制压缩包(
apache-maven-x.x.x-bin.zip)。 - 解压:将压缩包解压到指定目录,如
C:\Program Files\apache-maven-x.x.x。 - 配置环境变量:
- 右键“此电脑”,选择“属性”,进入“高级系统设置”。
- 在“系统属性”窗口的“高级”选项卡下,点击“环境变量”。
- 在“系统变量”中找到“Path”,点击“编辑”,添加 Maven 的
bin目录路径(如C:\Program Files\apache-maven-x.x.x\bin)。
- 配置镜像源:
- 打开 Maven 安装目录下的
conf\settings.xml文件。 - 在
<mirrors>标签内添加以下配置:
- 打开 Maven 安装目录下的
xml
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>- 验证安装:在命令提示符中输入
mvn -v,若显示 Maven 版本信息,则安装成功。
Mac 系统
- 安装 Homebrew(若未安装):在终端执行
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)",按提示完成安装。 - 通过 Homebrew 安装 Maven:在终端输入
brew install maven。 - 配置环境变量:
- 打开终端,使用文本编辑器打开
~/.bash_profile(或~/.zshrc,取决于使用的终端)。 - 添加
export PATH="/usr/local/opt/maven/bin:$PATH",保存后在终端输入source ~/.bash_profile(或source ~/.zshrc)使其生效。
- 打开终端,使用文本编辑器打开
- 配置镜像源:
- 在终端打开
~/.m2/settings.xml(若不存在则创建)。 - 在
<mirrors>标签内添加与 Windows 相同的阿里云镜像配置。
- 在终端打开
- 验证安装:在终端输入
mvn -v,若显示版本信息,则安装成功。 - Settings.xml 配置:
xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>huaweicloud</id>
<mirrorOf>central</mirrorOf>
<name>huaweicloud maven</name>
<url>https://repo.huaweicloud.com/repository/maven-public/</url>
</mirror>
<mirror>
<id>tencentcloud</id>
<mirrorOf>central</mirrorOf>
<name>tencentcloud maven</name>
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
<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>
</mirrors>
</settings>三、Maven 基本命令
- mvn clean:清理项目,删除
target目录下的生成文件,确保下次构建基于全新状态。 - mvn compile:编译
src/main/java下的源代码到target/classes目录下的 class 文件,按模块依赖关系依次编译。 - mvn test:运行
src/test/java下的单元测试,在控制台输出测试结果,包括通过和失败的数量及错误信息。 - mvn package:将项目打包,普通 Java 项目生成 JAR 文件,Web 项目生成 WAR 文件,存放在
target目录下,打包前自动执行编译和测试。 - mvn install:将项目安装到本地 Maven 仓库,供其他项目引用,包含编译、测试和打包步骤,并复制文件和依赖信息到本地仓库。
- mvn deploy:将项目部署到远程 Maven 仓库,需在
pom.xml配置远程仓库地址和认证信息,上传构件和元数据。
四、进阶用法
- 多模块项目管理:大型项目可拆分为多个模块,在父项目
pom.xml中用<modules>标签定义子模块,Maven 能确保模块依赖准确,一次性构建所有模块,提高项目构建和管理效率。 - 依赖管理高级技巧:
- 排除依赖传递:使用
<exclusions>标签排除不需要的传递依赖,避免项目体积增大和版本冲突,如排除spring-boot-starter-web中的默认日志依赖logback:
- 排除依赖传递:使用
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>- **依赖范围控制**:合理设置依赖范围(如 `compile`、`test`、`runtime` 等)优化构建和运行效率,如将测试框架(JUnit)依赖范围设为 `test`,避免在生产环境加载不必要的依赖,减小打包文件体积。
- 构建生命周期定制:Maven 构建生命周期含多个阶段,可在
pom.xml配置插件自定义构建过程,如用maven-antrun-plugin在特定阶段执行 Ant 任务,或用maven-shade-plugin在打包阶段定制 JAR 文件。
五、插件详解
- 常用插件介绍:
- maven-compiler-plugin:用于编译项目源代码,可配置编译的 Java 版本,如:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</source>
</configuration>
</plugin>- **maven-surefire-plugin**:执行单元测试,可配置测试参数,如测试类命名模式、是否跳过测试等,方便针对性测试。
- **maven-jar-plugin**:将项目打包成 JAR 文件,并可定制 `MANIFEST.MF` 文件和添加额外文件,如配置主类使 JAR 可直接运行:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>- 插件的配置与使用技巧:
- 插件版本管理:在
<pluginManagement>节集中管理插件版本,子模块继承统一配置,便于升级和维护,如:
- 插件版本管理:在
xml
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</pluginManagement>- **插件参数调优**:根据项目需求调整插件参数,如 `maven-compiler-plugin` 可优化编译内存参数,`maven-surefire-plugin` 可设置测试超时时间,提高构建效率:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<fork>true</fork>
<meminitial>512m</meminitial>
<maxmem>1024m</maxmem>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<argLine>-Dsurefire.timeout=300</argLine>
</configuration>
</plugin>六、最佳实践与常见问题解决
- 项目结构规范:遵循标准 Maven 项目结构,源代码放
src/main/java,测试代码放src/test/java,资源文件放src/main/resources等,提高项目可读性、可维护性和构建准确性。 - 依赖版本管理策略:遵循语义化版本规范选择依赖版本,核心依赖选稳定版,非关键依赖评估后可选新版,定期更新依赖并充分测试,防止兼容性问题。
- 常见问题解决:
- 依赖冲突问题:使用
mvn dependency:tree查看依赖树,通过<exclusions>标签排除冲突依赖或在pom.xml明确指定依赖版本解决。 - 构建速度慢的优化:可采取硬件资源升级、优化编译器参数(如
maven-compiler-plugin内存分配)、调整依赖范围、启用并行构建(mvn clean install -T 4)和配置本地仓库镜像等措施。
- 依赖冲突问题:使用
Maven 是 Java 开发的重要工具,深入学习和掌握其功能技巧,遵循最佳实践并解决常见问题,有助于提升项目开发效率和质量,让项目构建管理更轻松高效。
公众号一键文章同步:
FreeTimeAI-wx.png
欢迎浏览和收藏🔖我们的主站:SpacesHome
你可以探索下面的其他站点🔍: 🔹FreeTimeAI 🔹YellowFaceAI 🔹全网热榜 🔥 🔹人工智能网站合集 🔹百宝箱 🧰
🔥FreeTimeAI 直达
20241028114423.jpg
🔥小黄人AI直达
screely-1727418802179.png
关注FreeTimeAI:🔥FreeTimeAI 回复关键字【chat】获得密钥。
对于商业化合作请留言。💼 如果本文对您有帮助,可以下方赞赏我们💪💪Good luck! 🎉🎉
2024:Maven 从入门到精通全攻略https://blog.autoais.eu.org/posts/2024/1218
欢迎浏览和收藏🔖我们的主站
Start: FreeTimeAI 🙏支持
对于商业化合作请留言。💼
如果本文对您有帮助,可以下方赞赏我们💪💪Good luck!
赞赏博主
