在基础篇我们学会了 Maven 的安装、命令、依赖、仓库。本篇进入生命周期、IDEA 集成、多模块继承 / 聚合、私服 Nexus 部署与使用是真实开发必备技能。一、Maven 三大生命周期Maven 拥有三套相互独立的生命周期clean 生命周期清理项目default 生命周期最重要validate → compile → test → package → install → deploysite 生命周期生成项目站点执行一个阶段时会自动执行前面所有阶段。完整生命周期生命周期cleandefaultsite阶段(phase)执行顺序由上至下pre-cleanvalidatepre-sitecleaninitializesitepost-cleangenerate-sourcespost-siteprocess-sourcessite-deploygenerate-resourcesprocess-resourcescompileprocess-classesgenerate-test-sourcesprocess-test-sourcesgenerate-test-resourcesprocess-test-resourcestest-compileprocess-test-classestestprepare-packagepackagepre-integration-testintegration-testpost-integration-testverifyinstalldeploy用户在mvn命令后可以指定三个生命周期中的任何阶段则Maven会按以下逻辑执行首先会得到该阶段所属生命周期从该生命周期中的第一个阶段开始按顺序执行直至该阶段本身。例如执行mvn clean命令会依次执行clean生命周期中的pre-clean阶段及clean阶段。mvn命令后可以指定多个阶段Maven会按照输入的顺序依次执行每次执行都会按照之前描述的逻辑执行。之前提到实际的工作还是由插件来完成的这意味着插件需要和阶段绑定起来。Maven已经事先将很多核心插件绑定到对应的阶段这样用户几乎不用配置就有构建Maven项目。Maven的内置绑定如下生命周期阶段(phase)插件目标cleancleanmaven-clean-plugin:cleandefaultprocess-resourcesmaven-resources-plugin:resourcescompilemaven-compiler-plugin:compilegenerate-test-resourcesmaven-resources-plugin:testResoucestest-compilemaven-compiler-plugin:testCompiletestmaven-surefire-plugin:testpackage打包类型是jar时maven-jar-plugin:jar打包类型是war时maven-war-plugin:warinstallmaven-install-plugin:installdeploymaven-deploy-plugin:deploysitesitemaven-site-plugin:sitesite-deploymaven-site-plugin:deploy二、IDEA 集成 Maven1. IDEA 全局配置File → Settings → Build Tools → Maven配置Maven 主目录settings.xml本地仓库2. 创建 Maven 项目Java 项目maven-archetype-quickstartWeb 项目maven-archetype-webapp3. 导入 Maven 项目直接打开pom.xml→ Open as Project。4. IDEA 中执行 Maven 命令右侧「Maven」面板 → Lifecycle 直接点击命令。三、Maven 多模块继承与聚合企业项目一定会拆分成多个模块如common、dao、service、controller、api...1. 继承parent继承就是避免重复maven的继承也是这样它还有一个好处就是让项目更加安全。比如我们在项目开发的过程中可能多个模块独立开发但是多个模块可能依赖相同的公共模块比如说每个模块都需要javaseo-utils在编译的时候maven-compiler-plugin插件也要被引入maven仓库地址以及发布目录都是相同的配置。我们可以使用Maven的继承功能把公共的配置信息写到父模块中子模块只要继承了该父模块也会继承父模块的配置信息。父项目 packaging pom子项目使用parent继承父版本、依赖、插件目的统一版本、减少重复配置父 pompackagingpom/packaging子 pomparent groupIdxxx/groupId artifactIdxxx-parent/artifactId version1.0/version /parent可继承的POM元素groupId项目组 ID 项目坐标的核心元素version项目版本项目坐标的核心元素description 项目的描述信息organization 项目的组织信息inceptionYear 项目的创始年份url 项目的 url 地址develoers 项目的开发者信息contributors 项目的贡献者信息distributionManagerment 项目的部署信息issueManagement 缺陷跟踪系统信息ciManagement 项目的持续继承信息scm 项目的版本控制信息mailingListserv 项目的邮件列表信息properties自定义的 Maven 属性dependencies项目的依赖配置dependencyManagement醒目的依赖管理配置repositories 项目的仓库配置build 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等reporting 包括项目的报告输出目录配置、报告插件配置等。2. 依赖管理dependencyManagement父项目统一管理版本子项目不用写 versiondependencyManagement dependencies dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.48/version /dependency /dependencies /dependencyManagement3. 聚合modules我们在平时的开发中项目往往会被划分为好几个模块比如common公共模块、system系统模块、log日志模块、reports统计模块、monitor监控模块等等。这时我们肯定会出现这么一个需要我们需要一次构件多个模块而不用每个模块都去mvn以上面得父子项目为例,当我们对parent进行mvn install时,会对core,manage和portal项目均进行install操作:modules modulecommon/module moduledao/module moduleservice/module /modules四、Maven 私服Nexus 搭建与使用正式开发不同的项目组开发不同的工程。maven-dao工程开发完毕发布到私服maven-service从私服下载dao。公司在自己的局域网内搭建自己的远程仓库服务器称为私服 私服服务器即是公司内部的maven远程仓库 每个员工的电脑上安装maven软件并且连接私服服务器员工将自己开发的项目打成jar并发布到私服服务器其它项目组从私服服务器下载所依赖的构件jar。私服还充当一个代理服务器当私服上没有jar包会从互联网中央仓库自动下载。1. 为什么要用私服加快下载速度管理公司内部私有 jar权限控制、版本管控2. Nexus 仓库类型Nexus是Maven仓库管理器 通过nexus可以搭建maven仓库同时nexus还提供强大的仓库管理功能构件搜索功能等。hosted内部发布仓库releases /snapshotsproxy代理中央仓库group仓库组用来合并多个hosted/proxy仓库virtual兼容Maven1版本的jar或者插件3. 发布项目到私服settings.xml 配置账号server idreleases/id usernameadmin/username passwordadmin123/password /serverpom.xml 配置发布地址distributionManagement repository idreleases/id urlhttp://localhost:8079/nexus/releases/url /repository /distributionManagement执行mvn deploy4. 从私服下载依赖配置镜像mirror idnexus/id mirrorOf*/mirrorOf urlhttp://localhost:8079/nexus/groups/public/url /mirror五、Maven 常用高级配置1. 自定义属性properties mysql.version5.1.48/mysql.version /properties使用version${mysql.version}/version2. 第三方 jar 安装到本地 / 私服mvn install:install-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37 -Dfilefastjson-1.1.37.jar -Dpackagingjar把jar包上传到私服先在settings.xml配置文件中配置用户名密码server idthirdparty/id usernameadmin/username passwordadmin123/password /server上传到私服mvn deploy:deploy-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37 -Dpackagingjar -Dfilefastjson-1.1.37.jar -Durlhttp://localhost:8079/nexus/content/repositories/thirdparty/ -DrepositoryIdthirdparty
Maven 从入门到精通:—— 多模块、继承、聚合与私服搭建
发布时间:2026/6/1 1:40:31
在基础篇我们学会了 Maven 的安装、命令、依赖、仓库。本篇进入生命周期、IDEA 集成、多模块继承 / 聚合、私服 Nexus 部署与使用是真实开发必备技能。一、Maven 三大生命周期Maven 拥有三套相互独立的生命周期clean 生命周期清理项目default 生命周期最重要validate → compile → test → package → install → deploysite 生命周期生成项目站点执行一个阶段时会自动执行前面所有阶段。完整生命周期生命周期cleandefaultsite阶段(phase)执行顺序由上至下pre-cleanvalidatepre-sitecleaninitializesitepost-cleangenerate-sourcespost-siteprocess-sourcessite-deploygenerate-resourcesprocess-resourcescompileprocess-classesgenerate-test-sourcesprocess-test-sourcesgenerate-test-resourcesprocess-test-resourcestest-compileprocess-test-classestestprepare-packagepackagepre-integration-testintegration-testpost-integration-testverifyinstalldeploy用户在mvn命令后可以指定三个生命周期中的任何阶段则Maven会按以下逻辑执行首先会得到该阶段所属生命周期从该生命周期中的第一个阶段开始按顺序执行直至该阶段本身。例如执行mvn clean命令会依次执行clean生命周期中的pre-clean阶段及clean阶段。mvn命令后可以指定多个阶段Maven会按照输入的顺序依次执行每次执行都会按照之前描述的逻辑执行。之前提到实际的工作还是由插件来完成的这意味着插件需要和阶段绑定起来。Maven已经事先将很多核心插件绑定到对应的阶段这样用户几乎不用配置就有构建Maven项目。Maven的内置绑定如下生命周期阶段(phase)插件目标cleancleanmaven-clean-plugin:cleandefaultprocess-resourcesmaven-resources-plugin:resourcescompilemaven-compiler-plugin:compilegenerate-test-resourcesmaven-resources-plugin:testResoucestest-compilemaven-compiler-plugin:testCompiletestmaven-surefire-plugin:testpackage打包类型是jar时maven-jar-plugin:jar打包类型是war时maven-war-plugin:warinstallmaven-install-plugin:installdeploymaven-deploy-plugin:deploysitesitemaven-site-plugin:sitesite-deploymaven-site-plugin:deploy二、IDEA 集成 Maven1. IDEA 全局配置File → Settings → Build Tools → Maven配置Maven 主目录settings.xml本地仓库2. 创建 Maven 项目Java 项目maven-archetype-quickstartWeb 项目maven-archetype-webapp3. 导入 Maven 项目直接打开pom.xml→ Open as Project。4. IDEA 中执行 Maven 命令右侧「Maven」面板 → Lifecycle 直接点击命令。三、Maven 多模块继承与聚合企业项目一定会拆分成多个模块如common、dao、service、controller、api...1. 继承parent继承就是避免重复maven的继承也是这样它还有一个好处就是让项目更加安全。比如我们在项目开发的过程中可能多个模块独立开发但是多个模块可能依赖相同的公共模块比如说每个模块都需要javaseo-utils在编译的时候maven-compiler-plugin插件也要被引入maven仓库地址以及发布目录都是相同的配置。我们可以使用Maven的继承功能把公共的配置信息写到父模块中子模块只要继承了该父模块也会继承父模块的配置信息。父项目 packaging pom子项目使用parent继承父版本、依赖、插件目的统一版本、减少重复配置父 pompackagingpom/packaging子 pomparent groupIdxxx/groupId artifactIdxxx-parent/artifactId version1.0/version /parent可继承的POM元素groupId项目组 ID 项目坐标的核心元素version项目版本项目坐标的核心元素description 项目的描述信息organization 项目的组织信息inceptionYear 项目的创始年份url 项目的 url 地址develoers 项目的开发者信息contributors 项目的贡献者信息distributionManagerment 项目的部署信息issueManagement 缺陷跟踪系统信息ciManagement 项目的持续继承信息scm 项目的版本控制信息mailingListserv 项目的邮件列表信息properties自定义的 Maven 属性dependencies项目的依赖配置dependencyManagement醒目的依赖管理配置repositories 项目的仓库配置build 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等reporting 包括项目的报告输出目录配置、报告插件配置等。2. 依赖管理dependencyManagement父项目统一管理版本子项目不用写 versiondependencyManagement dependencies dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.48/version /dependency /dependencies /dependencyManagement3. 聚合modules我们在平时的开发中项目往往会被划分为好几个模块比如common公共模块、system系统模块、log日志模块、reports统计模块、monitor监控模块等等。这时我们肯定会出现这么一个需要我们需要一次构件多个模块而不用每个模块都去mvn以上面得父子项目为例,当我们对parent进行mvn install时,会对core,manage和portal项目均进行install操作:modules modulecommon/module moduledao/module moduleservice/module /modules四、Maven 私服Nexus 搭建与使用正式开发不同的项目组开发不同的工程。maven-dao工程开发完毕发布到私服maven-service从私服下载dao。公司在自己的局域网内搭建自己的远程仓库服务器称为私服 私服服务器即是公司内部的maven远程仓库 每个员工的电脑上安装maven软件并且连接私服服务器员工将自己开发的项目打成jar并发布到私服服务器其它项目组从私服服务器下载所依赖的构件jar。私服还充当一个代理服务器当私服上没有jar包会从互联网中央仓库自动下载。1. 为什么要用私服加快下载速度管理公司内部私有 jar权限控制、版本管控2. Nexus 仓库类型Nexus是Maven仓库管理器 通过nexus可以搭建maven仓库同时nexus还提供强大的仓库管理功能构件搜索功能等。hosted内部发布仓库releases /snapshotsproxy代理中央仓库group仓库组用来合并多个hosted/proxy仓库virtual兼容Maven1版本的jar或者插件3. 发布项目到私服settings.xml 配置账号server idreleases/id usernameadmin/username passwordadmin123/password /serverpom.xml 配置发布地址distributionManagement repository idreleases/id urlhttp://localhost:8079/nexus/releases/url /repository /distributionManagement执行mvn deploy4. 从私服下载依赖配置镜像mirror idnexus/id mirrorOf*/mirrorOf urlhttp://localhost:8079/nexus/groups/public/url /mirror五、Maven 常用高级配置1. 自定义属性properties mysql.version5.1.48/mysql.version /properties使用version${mysql.version}/version2. 第三方 jar 安装到本地 / 私服mvn install:install-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37 -Dfilefastjson-1.1.37.jar -Dpackagingjar把jar包上传到私服先在settings.xml配置文件中配置用户名密码server idthirdparty/id usernameadmin/username passwordadmin123/password /server上传到私服mvn deploy:deploy-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37 -Dpackagingjar -Dfilefastjson-1.1.37.jar -Durlhttp://localhost:8079/nexus/content/repositories/thirdparty/ -DrepositoryIdthirdparty