28-Linux学习之旅之Maven与Nexus制品库

📅 发布时间:2026/8/25 4:34:01
28-Linux学习之旅之Maven与Nexus制品库
Linux学习之旅之Maven与Nexus制品库一、认识Maven1、Maven是什么Maven 是 Java 项目的构建工具负责将源代码编译、测试、打包成可运行的 JAR 或 WAR 包。2、Maven核心功能核心功能说明依赖管理统一管理 jar 包自动下载、引入第三方 jar解决 jar 包版本冲突统一管理版本号不用手动复制 jar 到项目项目构建一键完成编译、测试、打包、安装、部署一套命令完成整套流程3、构建流程mvn cleaninstall↓ clean删除target目录 ↓ validate 校验项目 ↓ compile 编译main源码 → target/classes ↓test编译并执行单元测试测试失败构建终止 ↓ package 打包jar/war → target ↓install拷贝构件到本地仓库二、pom.xml 核心配置pom.xml 是 Maven 项目的工程文件类似于 C 语言项目中 ./configure 的作用——定义了项目的元信息、依赖关系和构建方式。与 configure 不同的是pom.xml 中的依赖如果本地没有Maven 会自动从仓库下载而 configure只会检查并报错。?xmlversion1.0encodingUTF-8?!--根标签项目对象模型--projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema‑instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven‑4.0.0.xsd!--模型版本固定4.0.0--modelVersion4.0.0/modelVersion!--GAV坐标唯一标识项目--groupIdcom.demo/groupId!--公司/组织包名--artifactIddemo‑project/artifactId!--项目/模块名称--version1.0‑SNAPSHOT/version!--版本号--!--打包方式jar / war / pom默认jar--packagingjar/packaging!--项目名称可选--namedemo工程/name!--properties定义全局变量统一版本--propertiesjava.version1.8/java.versionspring.version5.3.20/spring.version/properties!--dependencies依赖导入第三方jar--dependenciesdependency!--依赖的GAV坐标--groupIdorg.springframework/groupIdartifactIdspring‑context/artifactIdversion${spring.version}/version!--引用properties变量--!--依赖范围scope控制生效周期--scopecompile/scope!--排除依赖解决jar包冲突排除传递依赖--exclusionsexclusiongroupIdxxx/groupIdartifactIdxxx/artifactId/exclusion/exclusions/dependency/dependencies!--dependencyManagement依赖版本管理父pom用--!--只声明版本不实际引入依赖子模块直接写gav不用写version--dependencyManagementdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring‑context/artifactIdversion5.3.20/version/dependency/dependencies/dependencyManagement!--build构建、插件配置--buildplugins!--插件配置--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven‑compiler‑plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/source!--编译源码JDK版本--target1.8/target!--生成class字节码版本--/configuration/plugin/plugins/build!--repositories 远程仓库/私服--repositoriesrepositoryidnexus/idurlhttp://xxx/nexus/repository/public/url/repository/repositories!--父工程继承--parentgroupIdcom.demo/groupIdartifactIddemo‑parent/artifactIdversion1.0‑SNAPSHOT/versionrelativePath../pom.xml/relativePath/parent!--多模块聚合--modulesmoduledemo‑common/modulemoduledemo‑service/module/modules/project标签作用projectpom 根标签groupId组织、公司标识G 坐标artifactId项目 / 模块名称A 坐标version版本号V 坐标‑SNAPSHOT快照版本RELEASE 正式版本packaging打包类型jar/war/pompom 用于父工程聚合工程properties定义变量统一管理版本使用${变量名}引用dependencies实际引入依赖 jardependency单个依赖写 GAVscope依赖范围compile、test、provided、runtimeexclusions排除传递依赖解决版本冲突dependencyManagement版本锁定不真正引入 jar多用于父工程统一管理版本parent继承父 pom复用父工程配置、依赖modules聚合多模块一键构建多个子模块build构建配置编译、插件plugins插件配置编译插件、打包插件repositories配置远程仓库、私服地址三、必知的 Maven 命令clean清理 target 目录compile编译test单元测试package打包install安装本地仓库deploy部署私服。 mvn dependency:tree用于查看依赖树解决 jar 包冲突。 -DskipTests可以跳过单元测试。Maven 命令作用说明mvn clean清理删除target目录清除上次编译打包产物开发经常先 cleanmvn compile编译源码编译 main 下 java 代码生成 class 到target/classes不执行测试mvn test执行单元测试编译 运行 test 目录测试代码测试失败直接终止构建mvn package打包编译、测试生成 jar/war 包输出到 target 目录mvn install安装到本地仓库执行打包把 jar/war 复制到本机本地仓库本机其他项目可以引用mvn deploy部署上传私服把构件上传到企业私服仓库需要配置私服多用于项目发布mvn clean compile清理后编译先删 target再编译常用mvn clean package清理 打包日常打包最常用清理旧产物再打包mvn clean install清理 安装开发高频命令清理‑编译‑测试‑打包‑安装本地仓库mvn clean deploy清理 部署发布到私服mvn dependency:tree打印依赖树排查 jar 包版本冲突非常重要查看全部传递依赖mvn dependency:list列出所有依赖列出项目引入全部 jar 包mvn help:effective‑pom查看生效 pom把继承、父 pom 合并输出完整最终 pom 配置四、制品与制品库1、什么是制品和制品库Maven 里制品构件 Artifact项目构建输出产物jar、war、pom 文件都属于制品。 制品库专门存放、管理制品文件的仓库。五、Nexus基础认知1、什么是NexusNexusSonatype Nexus Repository是一款开源的仓库管理平台支持存储和管理多种制品类型JAR、Docker镜像、npm 包等。2、仓库认知仓库类型核心作用是否存储制品能否 deploy 上传典型实例宿主仓库 hosted存放企业自己开发的私有 jar 包分为 release 正式版、snapshot 快照版✅ 存储✅ 可以上传maven‑releases正式、maven‑snapshots快照代理仓库 proxy代理外网远程仓库本地没有 jar就去远程拉取并缓存到私服不允许上传私有包✅只缓存外网下载的包❌不可 deploy 上传maven‑central代理 Maven 中央仓库Sonatype仓库组 group逻辑聚合器本身不存任何 jar把多个 hosted、proxy 合并对外暴露一个统一访问地址。查找顺序按照成员列表从上往下查找❌不存储❌不能 deploy 上传maven‑publicNexus 默认仓库组中央仓库 CentralMaven 官方外网公共仓库全世界开源 jar 存放地互联网远程源不属于私服内部仓库外网服务器存储❌普通用户不能上传https://repo1.maven.org/maven2/Sonatype3、仓库之间的工作流程下载依赖Maven项目请求jar ↓ 【本地仓库】存在→有→直接使用结束 ↓无 访问 Nexus【maven‑public(group仓库组)】 ↓ 先查【hosted宿主仓库(releases/snapshots)】有就返回 ↓无 交给【proxy代理仓库】 ↓proxy缓存没有 访问外网【中央仓库】下载jar ↓ 缓存到proxy仓库 → 返回给Maven保存到【本地仓库】上传依赖mvn deploy ↓ 不能提交给group pom指定hosted宿主仓库地址 ↓ release → maven‑releases(hosted)snapshot → maven‑snapshots(hosted)↓ 制品存入Nexus宿主仓库 ↓ 其他开发者通过 maven‑public(group)即可下载该jar