#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

模拟依赖冲突:

XML 复制代码
<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文件里面添加指定文件目录

XML 复制代码
    <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 (可选)

javascript 复制代码
version: '3.8'
services:
  nexus:
    user: "200:200"
    image: sonatype/nexus3:latest
    container_name: nexus
    restart: always
    ports:
      - "8081:8081"   # Web管理界面
    volumes:
      - /opt/nexus-data:/nexus-data:Z  # 持久化存储
    environment:
      - INSTALL4J_ADD_VM_PARAMS=-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g
    ulimits:  # 解决文件句柄限制问题
      nofile:
        soft: 65536
        hard: 65536

经过长达180Second的等待,Nexus也是正常启动啦

2.仓库配置

查看登录密码:

docker exec -it nexus cat /nexus-data/admin.password

明白四个自带的仓库:

3.建立用户角色

替换代理仓库配置的中央仓库

4.修改本地的setting.xml文件
5.上传jar包

在项目的pom文件中添加配置:

XML 复制代码
    <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命令上传到私服仓库中

相关推荐
奶油话梅糖9 分钟前
打开项目 0.9 秒、内存只有 IDEA 的 1/12:OpenIDEA 用 Rust 把 IntelliJ IDEA 重造了一遍
java·rust·github·intellij-idea
vipxieliang13 分钟前
语言对比卡:PHP vs Go vs Java 的优缺点、适用场景与「为什么选 PHP」
java·go·php
Rain的Java大神之路19 分钟前
公交App上“还有2站,约5分钟”怎么实现?90%的人答错这道大厂面试题:GPS漂移、ETA不准、10万QPS热点读全拆透(附完整代码)
java·后端·面试
golang学习记33 分钟前
IDEA 2026.3 远程开发迎来重磅升级
java·ide·intellij-idea·远程开发
天天被压力1 小时前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python
敲代码的小小酥1 小时前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
天天被压力1 小时前
【A股分钟级高频数据完全手册 #03】股票历史1分钟K线数据接口怎么用:Pro版批量拉取与本地缓存
java·人工智能·python
apcipot_rain1 小时前
C++转Java日记(02)
java·开发语言·c++
nice_lcj5201 小时前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发
码农小河6611 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库