#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命令上传到私服仓库中

相关推荐
探索java8 分钟前
Spring MVC框架中全局异常处理机制详解
java·spring·mvc
AI必将改变世界27 分钟前
【软考系统架构设计师备考笔记5】 - 专业英语
java·开发语言·人工智能·笔记·系统架构·英语
_祝你今天愉快30 分钟前
Java Lock
android·java·后端
熊猫片沃子1 小时前
mybatis 与mybatisplus 比较总结
java·后端·mybatis
Elastic 中国社区官方博客2 小时前
升级 Elasticsearch 到新的 AWS Java SDK
java·大数据·elasticsearch·搜索引擎·云计算·全文检索·aws
枣伊吕波2 小时前
十一、请求响应-请求:简单参数和实体参数(简单实体参数与复杂实体参数)
java·spring boot·后端
苇柠2 小时前
SpringMVC基础
java·后端·spring
xingzizhanlan2 小时前
apache-tomcat-11.0.9安装及环境变量配置
java·tomcat·apache
Sunlightʊə2 小时前
05.LinkedList与链表
java·数据结构·算法·链表
苦学编程的谢2 小时前
Spring_事务
java·后端·spring