)
Maven实战笔记含Nexus私服踩坑全记录前言本文整合Maven基础进阶知识点结合本人实操中Nexus2启动、Jar上传、编译报错全套踩坑问题整理适合Java后端入门/私服搭建自查所有报错均附真实解决方案。一、Maven核心进阶概念POM/坐标/依赖1. POM文件核心作用POMProject Object Model 项目对象模型pom.xml是Maven项目唯一核心配置定义项目坐标、依赖、打包、构建插件、父子继承等所有规则相当于传统项目的build.xml。2. Maven坐标唯一标识Jar5大坐标元素groupId、artifactId、version必填参数作用规范示例groupId组织/公司反向域名com.alibaba / cn.txartifactId项目/模块名fastjson / makefriendversion版本号1.0正式、1.0-SNAPSHOT快照packaging打包类型jar/war/pom父工程classifier附属包区分源码包、测试包专用版本规则SNAPSHOT开发快照允许重复上传存放私服snapshots仓库无后缀RELEASE正式稳定包存放私服thirdparty/releases仓库3. 依赖管理详解1依赖引入方式在pom.xml的dependencies标签内写坐标Maven自动从仓库下载对应Jar。示例dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependency2依赖Scope作用域关键compile默认编译/测试/运行均生效打包打入项目test仅单元测试生效如JUnit打包不输出provided编译测试有效运行由容器提供servlet-apiruntime仅运行时生效JDBC驱动3依赖传递、排除、可选依赖传递依赖A依赖BB依赖C → A自动引入C可通过optionaltrue/optional阻断传递依赖排除exclusions手动剔除不需要的传递JardependencygroupIdcn.tx/groupIdartifactIdHelloFriend/artifactIdversion0.0.1-SNAPSHOT/versionexclusionsexclusiongroupIdcn.tx/groupIdartifactIdHello/artifactId/exclusion/exclusions/dependency二、Maven三大仓库体系1. 本地仓库本机存放下载好的Jar包默认路径C:\Users\用户名\.m2\repository可修改settings.xml自定义本地仓库路径所有项目共用。2. 中央仓库Maven官方公共仓库无配置即可联网拉取Jar国内访问慢建议搭配私服/阿里云镜像。3. 私服Nexus本次实操重点公司内网私有仓库三大核心能力存放团队自定义Jar项目模块代理中央仓库加速外网依赖下载统一管控第三方Jarfastjson等Nexus2内置4个默认仓库snapshots存放xxx-SNAPSHOT快照包允许重复上传releases存放正式发行包thirdparty第三方外部Jar禁止上传SNAPSHOT包会报400错误central代理Maven中央仓库三、Maven生命周期与常用命令1. 三套独立生命周期clean清理target打包目录mvn cleandefault核心构建validate→compile→test→package→install→deploysite生成项目文档站点极少使用2. 高频命令说明# 1. 编译源码mvn compile# 2. 打包生成target/*.jarmvn package# 3. 打包并安装到【本地仓库】mvninstall# 4. 上传Jar到【Nexus私服】需要配置私服账号mvn deploy# 5. 清理打包产物mvn clean# 组合命令清理打包mvn clean package3. 两个易混淆上传命令区分mvn install:install-file作用Jar安装到本地仓库不需要启动Nexus踩坑点-Dfile路径写错直接报文件不存在mvn deploy:deploy-file作用Jar上传远程Nexus私服必须保证Nexus服务正常、端口8081监听两大硬性规则SNAPSHOT版本必须传snapshots仓库不能传thirdparty400报错settings.xml必须配置对应仓库ID的admin账号密码四、Maven继承与聚合多模块管理1. 继承统一版本、公共依赖父工程packagingpom子工程通过parent继承配置统一管理版本号、插件。父工程两种依赖管理dependencies所有子项目自动继承该JardependencyManagement仅定义版本子项目按需引入无需写version2. 聚合一次性构建多模块父工程添加modules标签执行mvn install会批量构建所有子模块适合微服务多模块项目。3. Properties统一版本管理在pom中自定义变量统一版本避免多处修改propertiesjdk.version8/jdk.versionmybatis.version3.4.6/mybatis.version/properties!-- 使用 --version${mybatis.version}/version五、IDEA整合Maven实操全局配置MavenFile→Settings→Build Tools→Maven指定Maven根目录、settings.xml、本地仓库创建普通Java Maven项目新建→Maven不选原型直接创建创建Web Maven项目勾选maven-archetype-webapp原型导入已有Maven项目选择项目根目录pom.xml导入常见慢创建解决方案Runner添加VM参数-DarchetypeCataloglocal六、Nexus2.12 全套搭建踩坑解决方案本次实操核心1. Nexus安装/启停命令Windows# 进入nexus bin目录 cd E:\nexus-2.12.0-01\bin # 安装Windows服务 nexus.bat install # 启动服务 nexus.bat start # 前台启动查看完整报错排查必用 nexus.bat console # 停止/卸载服务 nexus.bat stop nexus.bat uninstall访问地址http://localhost:8081/nexus默认账号admin 密码admin1232. Nexus启动致命报错修复报错1Unrecognized VM option ‘MaxPermSize192m’日志根因wrapper后台自动调用JDK9本机装了JDK21JDK9彻底移除永久代参数MaxPermSize修复打开bin/jsw/wrapper.conf注释旧参数替换元空间参数#wrapper.java.additional.1-XX:MaxPermSize192m wrapper.java.additional.1-XX:MaxMetaspaceSize192m文件末尾强制指定JDK8路径带双引号不能双层引号wrapper.java.commandE:\JAVA\JDK8\bin\java.exe报错2JDK21模块化反射异常InaccessibleObjectException日志module java.base does not opens java.lang根因Nexus2.12老旧程序不兼容JDK9模块化必须强制使用JDK8运行不要在高JDK下加兼容参数治标不治本。报错3wrapper提示参数错误0x57根因wrapper.java.command路径写了双层引号E:\xxx删除多余一对引号即可。报错4启动成功但8081端口无监听根因JVM内部Jetty服务启动失败仅wrapper服务进程拉起用nexus.bat console前台启动查看完整堆栈日志。3. Jar上传私服完整正确命令场景1项目快照包1.0-SNAPSHOT上传snapshots仓库mvn deploy:deploy-file ^ -DgroupIdcom ^ -DartifactIdmakefriend ^ -Dversion1.0-SNAPSHOT ^ -Dpackagingjar ^ -Dfilemakefriend-1.0-SNAPSHOT.jar ^ -Durlhttp://localhost:8081/nexus/content/repositories/snapshots/ ^ -DrepositoryIdsnapshots场景2第三方正式Jarfastjson 1.1.37上传thirdpartymvn deploy:deploy-file ^ -DgroupIdcom.alibaba ^ -DartifactIdfastjson ^ -Dversion1.1.37 ^ -Dpackagingjar ^ -Dfilefastjson-1.1.37.jar ^ -Durlhttp://localhost:8081/nexus/content/repositories/thirdparty/ ^ -DrepositoryIdthirdparty4. 上传400报错解决方案报错日志status code 40原因SNAPSHOT快照包上传到了thirdparty仓库Nexus拦截快照包更换snapshots仓库地址与ID即可。5. Maven私服认证配置settings.xml上传Jar必须配置server节点ID和命令-DrepositoryId完全一致servers!-- 正式仓库 --serveridreleases/idusernameadmin/usernamepasswordadmin123/password/server!-- 快照仓库 --serveridsnapshots/idusernameadmin/usernamepasswordadmin123/password/server!-- 第三方仓库 --serveridthirdparty/idusernameadmin/usernamepasswordadmin123/password/server/servers七、Maven编译报错实操修复报错不再支持源选项5。请使用 8 或更高版本日志maven-compiler-plugin 编译失败source/target5解决方案二选一pom.xml添加编译插件推荐项目永久生效buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource8/sourcetarget8/targetencodingUTF-8/encoding/configuration/plugin/plugins/build全局settings.xml配置JDK8编译属性八、全流程实操踩坑总结Nexus启动优先用nexus.bat console前台启动所有隐藏报错直接打印不要后台start2 JDK版本冲突是Nexus2最大坑必须固定JDK8禁止系统PATH存在高版本JDK优先3 deploy上传区分快照/正式仓库ID、url一一对应否则400无权限4 mvn install/deploy时-Dfile必须写真实存在的Jar路径绝对路径/相对路径均可5 Maven编译默认JDK5新项目统一配置JDK8编译插件6 自定义项目Jar不要和第三方Jar混用坐标否则私服依赖拉取混乱。