网站开发新功能,商城 小程序,企业网站建设训,网页设计与网站开发的卷子高效构建Java应用#xff1a;Maven入门和进阶#xff08;三#xff09; 三. Maven的核心功能和构建管理3.1 依赖管理和配置3.2 依赖传递和冲突3.3 依赖导入失败场景和解决方案3.4 扩展构建管理和插件配置 三. Maven的核心功能和构建管理
3.1 依赖管理和配置
Maven 依赖管理… 高效构建Java应用Maven入门和进阶三 三. Maven的核心功能和构建管理3.1 依赖管理和配置3.2 依赖传递和冲突3.3 依赖导入失败场景和解决方案3.4 扩展构建管理和插件配置 三. Maven的核心功能和构建管理
3.1 依赖管理和配置
Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中避免出现版本冲突和依赖缺失等问题。
我们通过定义 POM 文件Maven 能够自动解析项目的依赖关系并通过 Maven 仓库自动下载和管理依赖从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。
重点: 编写pom.xml文件!
maven项目信息属性配置和读取
!-- 模型版本 --
modelVersion4.0.0/modelVersion
!-- 公司或者组织的唯一标志并且配置时生成的路径也是由此生成 如com.companyname.project-groupmaven会将该项目打成的jar包放本地路径/com/companyname/project-group --
groupIdcom.companyname.project-group/groupId
!-- 项目的唯一ID一个groupId下面可能多个项目就是靠artifactId来区分的 --
artifactIdproject/artifactId
!-- 版本号 --
version1.0.0/version!--打包方式默认jarjar指的是普通的java项目打包方式 项目打成jar包war指的是web项目打包方式项目打成war包pom不会讲项目打包这个项目作为父工程被其他工程聚合或者继承后面会讲解两个概念
--
packagingjar/pom/war/packaging依赖管理和添加
!-- 通过编写依赖jar包的gav必要属性引入第三方依赖scope属性是可选的可以指定依赖生效范围依赖信息查询方式1. maven仓库信息官网 https://mvnrepository.com/2. mavensearch插件搜索--
dependencies!-- 引入具体的依赖包 --dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version!--生效范围- compile main目录 test目录 打包打包 [默认]- providedmain目录 test目录 Servlet- runtime 打包运行 MySQL- test: test目录 junit--scoperuntime/scope/dependency/dependencies依赖版本提取和维护:
!--声明版本--
properties!--命名随便,内部制定版本号即可--junit.version4.11/junit.version!-- 也可以通过 maven规定的固定的key配置maven的参数如下配置编码格式--project.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncoding
/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactId!--引用properties声明版本 --version${junit.version}/version/dependency
/dependencies3.2 依赖传递和冲突
依赖传递指的是当一个模块或库 A 依赖于另一个模块或库 B而 B 又依赖于模块或库 C那么 A 会间接依赖于 C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时构建工具如 Maven、Gradle会自动解析和加载其所有的直接和间接依赖确保这些依赖都可用。
依赖传递的作用是
减少重复依赖当多个项目依赖同一个库时Maven 可以自动下载并且只下载一次该库。这样可以减少项目的构建时间和磁盘空间。自动管理依赖: Maven 可以自动管理依赖项使用依赖传递简化了依赖项的管理使项目构建更加可靠和一致。确保依赖版本正确性通过依赖传递的依赖之间都不会存在版本兼容性问题确实依赖的版本正确性
依赖传递演示
项目中需要导入jackson相关的依赖通过之前导入经验jackson需要导入三个依赖分别为 通过查看网站介绍的依赖传递特性data-bind中依赖其他两个依赖
最佳导入直接可以导入data-bind自动依赖传递需要的依赖
!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.15.0/version
/dependency依赖冲突演示
当直接引用或者间接引用出现了相同的jar包! 这时呢一个项目就会出现相同的重复jar包这就算作冲突依赖冲突避免出现重复依赖并且终止依赖传递
maven自动解决依赖冲突问题能力会按照自己的原则进行重复依赖选择。同时也提供了手动解决的冲突的方式不过不推荐
解决依赖冲突如何选择重复依赖方式 1. 自动选择原则 短路优先原则第一原则 A—B—C—D—E—X(version 0.0.1)A—F—X(version 0.0.2)则A依赖于X(version 0.0.2)。依赖路径长度相同情况下则“先声明优先”第二原则 A—E—X(version 0.0.1)A—F—X(version 0.0.2)在depencies/depencies中先声明的路径相同会优先选择小思考:
前提A 1.1 - B 1.1 - C 1.1 F 2.2 - B 2.2 pom声明F 2.2A 1.1 B 2.2 3.3 依赖导入失败场景和解决方案
在使用 Maven 构建项目时可能会发生依赖项下载错误的情况主要原因有以下几种
下载依赖时出现网络故障或仓库服务器宕机等原因导致无法连接至 Maven 仓库从而无法下载依赖。依赖项的版本号或配置文件中的版本号错误或者依赖项没有正确定义导致 Maven 下载的依赖项与实际需要的不一致从而引发错误。本地 Maven 仓库或缓存被污染或损坏导致 Maven 无法正确地使用现有的依赖项并且也无法重新下载
解决方案 检查网络连接和 Maven 仓库服务器状态。 确保依赖项的版本号与项目对应的版本号匹配并检查 POM 文件中的依赖项是否正确。 清除本地 Maven 仓库缓存lastUpdated 文件因为只要存在lastupdated缓存文件刷新也不会重新下载。本地仓库中根据依赖的gav属性依次向下查找文件夹最终删除内部的文件刷新重新下载即可 例如 pom.xml依赖
dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.8/version
/dependency文件脚本使用 清理Maven错误缓存插件
使用记事本打开
set REPOSITORY_PATHD:\repository 改成你本地仓库地址即可
点击运行脚本即可自动清理本地错误缓存文件3.4 扩展构建管理和插件配置
构建概念:
项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 主动触发场景
重新编译 : 编译不充分, 部分文件没有被编译!打包 : 独立部署到外部服务器软件,打包部署部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用
命令方式构建:
语法: mvn 构建命令 构建命令…
命令描述mvn clean清理编译或打包后的项目结构,删除target文件夹mvn compile编译项目生成target文件mvn test执行测试源码 (测试)mvn site生成一个项目依赖信息的展示页面mvn package打包项目生成war / jar 文件mvn install打包后上传到maven本地仓库(本地部署)mvn deploy只打包上传到maven私服仓库(私服部署)
可视化方式构建: 构建命令周期:
构建生命周期可以理解成是一组固定构建命令的有序集合触发周期后的命令会自动触发周期前的命令也是一种简化构建的思路! 清理周期主要是对项目编译生成文件进行清理 包含命令clean 默认周期定义了真正构件时所需要执行的所有步骤它是生命周期中最核心的部分 包含命令compile - test - package - install / deploy 报告周期 包含命令site 打包: mvn clean package 本地仓库: mvn clean install
最佳使用方案:
打包: mvn clean package
重新编译: mvn clean compile
本地部署: mvn clean install 周期命令和插件:
周期→包含若干命令→包含若干插件!
使用周期命令构建简化构建过程
最终进行构建的是插件
插件配置:
build!-- jdk17 和 war包版本插件不匹配 --pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-war-plugin/artifactIdversion3.2.2/version/plugin/plugins
/build