尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Maven精讲

Maven精讲 文章目录一、Maven 简介二、Maven 安装与配置1. 安装步骤2. 仓库配置3. 构件下载一半失败的情况三、创建 Maven 项目1. 使用命令创建项目2. **Maven archetype:generate 参数表**3. 项目模板4. 项目结构四、认识POM1. 查看effective pom2. POM 标签大全五、Maven 的三大生命周期**1. Clean 生命周期****2. DefaultBuild生命周期****3. Site 生命周期**4. 关键注意事项六、快照(SNAPSHOT)1.使用场景**2. 快照vs正式版本号****3. 版本号示例对比****4.总结**一、Maven 简介Maven 是 Apache 旗下的一个开源项目管理工具主要用于 Java 项目的构建、依赖管理和文档生成。它通过一个标准化的项目结构和一个 XML 文件pom.xml来管理项目的生命周期解决了传统构建工具如 Ant配置复杂、依赖管理困难等问题。其核心功能包括标准化项目结构自动生成统一、标准的项目目录结构降低学习成本。依赖管理自动处理项目所需第三方库的下载、版本冲突解决和传递性依赖管理。项目构建提供clean、compile、test、package、install等标准化生命周期流程。信息管理通过pom.xml集中管理项目配置、构建规则和文档生成。多模块支持支持父子POM结构实现大型项目拆分管理。插件扩展通过插件实现编译、测试、打包等任务。二、Maven 安装与配置1. 安装步骤下载 Maven从 Apache Maven 官网 下载最新版本如 apache-maven-3.8.1-bin.zip。解压安装解压到指定目录如D:\apache-maven-3.8.1。配置环境变量添加MAVEN_HOME指向安装目录。将%MAVEN_HOME%\bin添加到PATH环境变量。验证安装命令行执行mvn -v显示版本信息即安装成功。输出的Java版本信息反映了Maven运行所依赖的JDK版本而非项目编译或运行时的目标Java版本。不同版本的Maven对JDK有不同的最低要求。例如Maven 3.8.x及以上版本需要JDK 1.7或更高版本运行。如果要修改mvn -v输出的Java版本需要更改JAVA_HOME环境变量使其指向所需的JDK路径。2. 仓库配置配置本地仓库运行maven命令会在用户目录下自动创建本地仓库 C:\Users用户名.m2\repository随着项目开发下载构件至本地仓库文件会越来越大占用大量C盘空间这里在D盘创建文件夹repository并配置本地仓库路径中央仓库这个仓库由 Maven 社区管理。无需显式配置默认地址https://repo.maven.apache.org/maven2/。需要通过网络才能访问。配置远程仓库由于中央仓库在国外所以下载jar包速度可能比较慢而阿里公司提供了一个远程仓库里面基本也都有开源项目的jar包。3. 构件下载一半失败的情况当Maven依赖包下载到一半失败时通常是由于网络中断、仓库服务器问题或本地缓存损坏等原因导致此时会生成以.lastUpdated为扩展名的临时文件阻碍后续重新下载。删除.lastUpdated文件手动删除找到本地Maven仓库路径。搜索所有以.lastUpdated结尾的文件并删除。例如find~/.m2/repository-name*.lastUpdated-delete或使用Windows批处理脚本clearLastUpdated.batecho off set REPO_PATH%USERPROFILE%\.m2\repository for /r %REPO_PATH% %%i in (*.lastUpdated) do del %%i pause强制更新在命令行中添加-U参数强制Maven检查更新并重新下载mvn cleaninstall-U三、创建 Maven 项目1. 使用命令创建项目下面图中等同于执行以下命令mvn archetype:generate -DgroupIdcom.example -DartifactIdmy-first-app -DarchetypeArtifactIdmaven-archetype-quickstart -DinteractiveModefalse -DarchetypeVersionRELEASE2.Mavenarchetype:generate参数表参数作用示例值用途说明-DgroupId指定项目的 Java 包名Group ID通常为域名反向写法。com.example唯一标识项目所属组织作为 Maven 依赖坐标的一部分。-DartifactId指定项目名称Artifact ID通常是模块名或应用名。my-first-app唯一标识项目模块生成的构件如 JAR默认命名为artifactId-version.jar。-DarchetypeArtifactId指定使用的 Maven 原型Archetype决定项目结构和内容。maven-archetype-quickstart快速生成标准项目结构如含App.java主类的 Java 项目。-DinteractiveMode是否启用交互模式true/false。false关闭交互模式直接使用命令行参数生成项目适合自动化脚本。-DarchetypeVersion指定原型的版本号RELEASE表示最新稳定版。RELEASE或1.4确保项目结构与特定原型版本兼容。-Dversion指定项目的初始版本号默认为1.0-SNAPSHOT。1.0.0定义项目的版本用于依赖管理和发布。-Dpackage覆盖groupId指定具体的包名需与groupId兼容。com.example.myapp自定义代码的包路径如主类放在com.example.myapp而非com.example。-DoutputDirectory指定项目生成的目录路径默认为当前目录。/tmp/projects控制项目文件的输出位置。3. 项目模板DarchetypeArtifactId用于指定 Maven 原型的标识符不同的值代表不同类型的项目模板。以下是一些常见的DarchetypeArtifactId值及其用途的表格展示DarchetypeArtifactId用途说明maven-archetype-quickstart生成一个基本的 Java 项目包含App.java主类和 JUnit 测试类。适合初学者快速上手。maven-archetype-webapp生成一个简单的 Java Web 应用项目包含web.xml和index.jsp文件。maven-archetype-archetype用于创建一个新的 Maven 原型项目本身。适合需要自定义项目模板的用户。maven-archetype-j2ee-simple生成一个简化的 J2EE 应用结构适合传统的企业级应用开发。maven-archetype-plugin生成一个 Maven 插件项目的模板用于开发自定义的 Maven 插件。maven-archetype-site生成一个 Maven 站点项目支持文档生成如 APT、XDoc、FML 等格式。maven-archetype-site-simple生成一个简化的 Maven 站点项目模板适合基本的文档需求。maven-archetype-portlet生成一个 JSR-268 Portlet 应用模板适合门户应用开发。maven-archetype-simple生成一个最小的 Maven 项目仅包含基本结构无额外依赖或代码。4. 项目结构my-first-app/ ├── pom.xml # Maven 项目配置文件 ├── src/ │ ├── main/ # 主代码目录 │ │ └── java/ # Java 源代码 │ │ └── com/example/App.java # 自动生成的示例类 │ └── test/ # 测试代码目录 │ └── java/ # 测试类 │ └── com/example/AppTest.java # 自动生成的测试类四、认识POMPOM ( Project Object Model项目对象模型 ) 是 Maven 的核心配置文件采用 XML 格式默认命名为 pom.xml。所有的 POM 都继承自一个父SuperPOM无论是否显式定义了这个父 POM。父POM是 Maven 默认的 POM。父 POM 包含了一些可以被继承的默认设置。因此当 Maven 发现需要下载 POM 中的 依赖时它会到 Super POM 中配置的默认仓库 https://repo.maven.apache.org/maven2 去下载。Maven 使用 effective pomSuper pom 加上工程自己的配置来执行相关的目标它帮助开发者在 pom.xml 中做尽可能少的配置当然这些配置可以被重写。1. 查看effective pom使用以下命令来查看完整的pom配置mvn help:effective-pom2. POM 标签大全以下是整合后的pom.xml标签分类详解表格涵盖基础信息、依赖管理、构建配置、环境配置、多模块管理及其他信息六大类包含标签、类别、说明、示例/可选值及是否必需的详细说明标签类别说明示例/可选值是否必需基础信息modelVersion项目结构POM 模型版本固定值4.0.0是groupId坐标组织标识反向域名com.example是artifactId坐标项目名称my-project是version坐标项目版本支持SNAPSHOT1.0.0-SNAPSHOT是packaging项目类型打包格式默认jarjar/war/pom/ear否name元信息项目显示名称My Application否description元信息项目描述A demo project否url元信息项目主页 URLhttps://example.com否依赖管理dependencies依赖依赖列表容器包含多个dependency否dependency依赖单个依赖定义包含groupId、artifactId、version等子标签可选scope依赖依赖作用域默认compilecompile/test/provided/runtime否optional依赖是否可选依赖默认falsetrue/false否exclusions依赖排除传递性依赖包含exclusion列表否构建配置build构建构建配置容器包含插件、资源等配置否plugins构建插件列表容器包含多个plugin否plugin构建单个插件定义需指定groupId和artifactId如maven-compiler-plugin可选resources构建资源文件配置定义resource路径如src/main/resources否testResources构建测试资源文件配置类似resources如src/test/resources否finalName构建最终打包文件名不含版本my-app否环境配置properties配置自定义变量容器可通过${key}引用定义键值对如java.version11/java.version否java.version属性Java 版本变量常见于 Spring Boot11/17否repositories仓库自定义远程仓库列表包含repository如 Nexus 私有仓库否pluginRepositories仓库自定义插件仓库类似repositories否多模块管理modules模块子模块列表聚合项目必需包含多个module如modulemodule-a/module聚合项目需要parent继承父 POM 引用继承项目必需需指定父项目坐标如groupIdcom.example/groupId继承项目需要dependencyManagement依赖统一管理依赖版本不直接引入依赖定义版本号如spring.version5.3.8/spring.version否profiles配置环境配置容器如开发/生产环境包含profile如iddev/id否其他信息licenses法律许可证信息包含license如Apache-2.0否developers人员开发者列表包含developer需指定name和email否contributors人员贡献者列表类似developers否issueManagement管理问题跟踪系统配置定义url如https://github.com/issues否五、Maven 的三大生命周期Maven 的生命周期分为 Clean、DefaultBuild 和 Site 三类每个生命周期由多个阶段Phase组成按顺序执行。1. Clean 生命周期作用清理项目生成的临时文件如target目录。包含阶段pre-clean执行清理前的准备工作。clean删除target目录默认阶段。post-clean执行清理后的收尾工作。常用命令mvn clean# 执行 clean 阶段清理 target 目录2. DefaultBuild生命周期作用构建项目编译、测试、打包、安装等是最常用的生命周期。关键阶段按顺序执行阶段说明validate验证项目配置是否正确如检查pom.xml。compile编译主源代码src/main/java→target/classes。test运行单元测试src/test/java生成测试报告target/surefire-reports。package打包项目根据packaging生成jar/war/pom等文件到target目录。verify运行集成测试验证打包结果是否符合标准。install将打包文件安装到本地仓库~/.m2/repository供其他项目依赖。deploy将打包文件部署到远程仓库如 Nexus 或 Maven Central。常用命令mvn compile# 编译主代码mvntest# 编译并运行测试不打包mvn package# 编译、测试并打包生成 target/xxx.jarmvninstall# 打包并安装到本地仓库mvn deploy# 打包并部署到远程仓库3. Site 生命周期作用生成项目文档和站点报告如代码质量分析、测试覆盖率等。包含阶段pre-site生成站点前的准备工作。site生成项目文档默认阶段输出到target/site。post-site生成站点后的收尾工作。site-deploy将站点部署到服务器如 GitHub Pages。常用命令mvn site# 生成项目文档mvn site-deploy# 部署站点到远程服务器4. 关键注意事项阶段顺序Maven 生命周期阶段是顺序执行的例如mvn package会隐式执行validate→compile→test→package。跳过测试使用-DskipTests跳过测试如mvn package -DskipTests。指定版本通过versions-maven-plugin批量修改版本号如mvn versions:set -DnewVersion1.1.0。依赖分析用mvn dependency:tree检查依赖冲突如[WARNING] Dependency conflict。多模块项目在根目录执行命令会递归应用到所有子模块如mvn clean install。六、快照(SNAPSHOT)在 Maven 中快照Snapshot 是一种特殊的版本号机制主要用于 开发阶段 的依赖管理。它的核心作用是 允许项目动态引用其他模块的最新开发版本而无需频繁修改版本号。1.使用场景一个大型的软件应用通常包含多个模块并且通常的场景是多个团队开发同一应用的不同模块。举个例子设想一个团队开发应用的前端项目为 app-ui(app-ui.jar:1.0)而另一个团队开发应用的后台使用的项目是>2. 快照vs正式版本号特性快照Snapshot正式版本号稳定性不稳定可能随时变化开发中频繁修改。稳定发布后不可更改生产环境专用。版本号格式必须包含-SNAPSHOT后缀如1.0.0-SNAPSHOT。无特殊后缀如1.0.0、2.1.3-RELEASE。修改权限可以重复部署同一快照版本覆盖旧文件。发布后禁止修改需升级版本号如1.0.1。依赖更新自动检查更新默认每天一次可通过-U强制。手动更新需显式修改版本号。构建行为每次构建可能下载不同内容的快照文件。每次构建使用相同版本的固定文件。缓存机制本地仓库的快照文件可能被覆盖无强一致性保证。本地仓库的正式版本文件永久保留。开发阶段✅ 推荐使用多模块协作、频繁迭代。❌ 禁止使用需稳定依赖。生产环境❌ 禁止使用可能导致不可预测的行为。✅ 必须使用确保行为一致。依赖第三方未发布功能✅ 可临时依赖快照版本测试新特性。❌ 需等待正式发布或使用其他分支版本。持续集成CI✅ 适合每次构建使用最新代码。❌ 不适合需固定版本保证可复现性。部署仓库需部署到快照仓库如 Nexus 的snapshots仓库。需部署到发布仓库如 Nexus 的releases仓库。文件保留策略快照仓库通常保留所有历史快照文件可配置清理策略。发布仓库仅保留最新版本文件旧版本需手动管理。元数据快照版本的maven-metadata.xml包含时间戳和构建号如1.0.0-20231001.123456-1。正式版本的元数据仅包含版本号如1.0.0。3. 版本号示例对比版本类型示例说明快照版本1.0.0-SNAPSHOT开发中版本可能每天变化内容不稳定。正式版本1.0.0首次发布版本稳定且不可修改。修订版本1.0.1修复1.0.0的 Bug 后发布的新版本。带标签版本1.0.0-RELEASE、2.1.3-BETA正式版本的变体如发布版、测试版但行为仍固定。4.总结对比项快照Snapshot正式版本号稳定性不稳定开发中稳定生产环境更新方式自动检查更新手动更新版本号使用场景开发、测试、CI生产、发布、长期依赖仓库类型快照仓库可覆盖发布仓库不可覆盖版本号后缀-SNAPSHOT无或-RELEASE/-BETA等标签
返回列表