#3:Maven进阶与私服搭建
Maven作为Java项目构建的核心工具,其配置与使用需重点关注依赖管理和仓库配置。中央仓库地址需在settings.xml中配置。依赖冲突可通过短路径优先、排除依赖、锁定版本、依赖调解、依赖优化和强制声明六种方式解决。资源文件需在pom.xml中配置resource目录确保编译时正确加载。企业级Nexus私服搭建可通过Docker容器快速部署,需配置hosted(私有仓库)、proxy(代理仓库)和group(仓库组)三类仓库。这些配置要点和实战技巧能有效提升Maven项目的依赖管理效率和构建稳定性。
1、配置
中央仓库依赖地址:Maven Repository: Search/Browse/Explore (mvnrepository.com)
菜鸟地址:Maven 常用命令 | 菜鸟教程 (runoob.com)
虚拟机参数(后续使用本地模版):
-DarchetypeCatalog=internal
2、作用域
Scope | 生效阶段 | 是否传递 |
---|---|---|
compile | 编译、测试、运行 | 是 |
provided | 编译、测试 | 是 |
runtime | 测试、运行 | 是 |
test | 测试 | 否 |
system | 编译、测试 | 否 |
compile:业务核心库
provided:Web容器依赖,比如javax.servlet-api依赖
runtime:数据库驱动和日志实现
3、范围传递
compile | test | provided | runtime | |
---|---|---|---|---|
compile | compile | - | - | runtime |
test | test | - | - | test |
provided | provided | - | - | provided |
runtime | runtime | - | - | runtime |
横轴:间接依赖; 纵轴:直接依赖
总结:编译传编译,运行传运行,测试提供阻断
4、依赖冲突
1.建议父POM统一版本管理
2.短路径优先
3.直接依赖声明优先
4.子模块统一管理
5.可选依赖
使用<optional>true</optional>标签不传递依赖
6.排除依赖(重点)
排除依赖后可能出现:ClassNotFoundException、NoClassDefFoundError、NoSuchMethodError
排除建议:
1.最小化排除范围
2.显示声明兼用性依赖
建议官网查看版本兼容文档,比如Mabatis的简介 – mybatis-spring-boot-autoconfigure --- Introduction – mybatis-spring-boot-autoconfigure
可以借助版本差异网站:Online API Diff Powered by Revapi
模拟依赖冲突:
<dependencies><!-- 引入 logback 作为实现 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.14</version></dependency><!-- 又间接引入 simple 实现 --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>5.0.1</version><exclusions><exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency><!-- 为了演示手动再加一次 simple --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>2.0.9</version></dependency></dependencies>
像这种情况一般就不要管了,排除依赖无法解决问题,要删除引入依赖才行
5、刷新依赖
有的时候明明依赖正确引入了,但是却依旧报错,那可能需要重新刷新一下!
先在Repository中搜索last,删除所有的无效依赖,再在IDEA里面更新
6、资源文件指定
有的时候properties或者xml文件不在资源目录(resources)下,在packsge时会出现无法携带到jar
解决办法:在pom文件里面添加指定文件目录
<build><resources><resource><!--指定java目录下的所有路径下的所有文件--><directory>src/main/java</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource><resource><!--指定resources目录下的所有路径下的所有文件--><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>
7、Nexus私服搭建
1.搭建环境
通过docker-compose.yml拉取运行nexus容器
echo 3 > /proc/sys/vm/drop_caches (可选)
sudo chown -R 200:200 /opt/nexus-data
sudo chcon -R -t container_file_t /opt/nexus-data (可选)
version: '3.8'
services:nexus:user: "200:200"image: sonatype/nexus3:latestcontainer_name: nexusrestart: alwaysports:- "8081:8081" # Web管理界面volumes:- /opt/nexus-data:/nexus-data:Z # 持久化存储environment:- INSTALL4J_ADD_VM_PARAMS=-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1gulimits: # 解决文件句柄限制问题nofile:soft: 65536hard: 65536
经过长达180Second的等待,Nexus也是正常启动啦
2.仓库配置
查看登录密码:
docker exec -it nexus cat /nexus-data/admin.password
明白四个自带的仓库:
3.建立用户角色
替换代理仓库配置的中央仓库
4.修改本地的setting.xml文件
5.上传jar包
在项目的pom文件中添加配置:
<distributionManagement><repository><id>cat</id><url>http://1.27.236.84:8081/repository/maven-releases/</url></repository><snapshotRepository><id>cat</id><url>http://1.27.236.84:8081/repository/maven-snapshots/</url></snapshotRepository></distributionManagement>
执行mvn clean deploy命令上传到私服仓库中