当前位置: 首页 > article >正文

解决Java项目中Maven爆红,三方包下载不下来的问题

前言

在Java项目开发过程中,我们经常会遇到各种依赖管理的问题。今天,就和大家分享一下我在处理dataease项目后端源码编译时,遇到三方包下载不下来的问题及详细解决过程,希望能帮助大家在遇到类似问题时快速解决。

一、问题背景

在编译dataease项目后端源码时,我发现pom文件中一个依赖包出现了下载问题。具体依赖定义如下:

<!--calcite核心包-->
<dependency>
    <groupId>org.apache.calcite</groupId>
    <artifactId>calcite-core</artifactId>
    <version>${calcite-core.version}</version>
    <classifier>de</classifier>
</dependency>

这个classifier标签可不简单,它的作用是在Maven目录存在多个同名不同版本或不同构建类型的包时,精准指定要引入的包。打个比方,如果没有这个标签,Maven会从org\apache\calcite\calcite-core\${calcite-core.version}目录下找calcite-core-1.35.5.jar(假设版本号是1.35.5)来导入;而加上<classifier>de</classifier>标签后,就会去找calcite-core-1.35.5-de.jar进行导入。

当时,我的pom文件飘红,检查本地Maven库,发现对应目录下确实没有带de后缀的包。

二、问题排查

(一)查看官网文档

通过查阅dataease项目官网的说明文档,我了解到core-backend源码引用的calcite-core依赖包,是基于Apache Calcite工程修改后的,属于非开源部分。这个依赖包会持续迭代并上传到公共仓库,正常情况下对社区版源码的编译和使用不会造成影响。既然是要从公共仓库获取,那项目中肯定配置了对应的仓库地址。

(二)检查项目pom配置

查看项目的pom文件,果然找到了定义拉取calcite-core依赖的仓库:

<repositories>
    <repository>
        <id>fit2cloud-public</id>
        <name>Fit2cloud Public</name>
        <url>https://repository.fit2cloud.com/repository/fit2cloud-public/</url>
    </repository>
</repositories>

配置看起来没问题,那为什么还是下载不下来呢?

(三)检查本地Maven配置

问题的关键就在这里!当我查看本地Maven的setting.xml文件时,发现了如下配置:

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

原来,我配置了阿里云公共仓库镜像,并且<mirrorOf>设置为*,这意味着所有的依赖下载请求都会被拦截,统一到阿里云公共仓库去下载。但我们项目需要的calcite-core依赖包并不在阿里云公共仓库,它在fit2cloud-public这个私有仓库里,所以就出现了下载失败的情况。

三、解决方案

知道了问题所在,解决起来就有方向了。我们要做的就是放开对fit2cloud-public仓库的请求,让Maven可以从正确的地方下载依赖包。修改本地Maven的setting.xml文件中的镜像配置,如下:

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*,!fit2cloud-public</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

这里的*,!fit2cloud-public是一个很重要的知识点。在Maven的镜像配置中,<mirrorOf>标签用于指定哪些仓库需要被镜像。*代表所有仓库,而!符号表示排除。所以*,!fit2cloud-public的意思就是除了fit2cloud-public仓库之外的所有仓库,都使用阿里云公共仓库这个镜像。这样,Maven在下载依赖包时,对于fit2cloud-public仓库的请求就不会被拦截到阿里云公共仓库,而是直接从fit2cloud-public仓库获取,从而解决了依赖包下载不下来的问题。修改完成后,重新编译项目,一切正常!

四、相关知识拓展

(一)Maven仓库与镜像的原理

Maven仓库是用来存储项目依赖的地方,分为本地仓库和远程仓库。本地仓库在我们本地机器上,用于缓存下载过的依赖包,下次项目使用时可以直接从本地获取,加快构建速度。远程仓库则是位于网络上的仓库,像中央仓库、公司的私有仓库等。

镜像仓库的作用是为了提高下载速度和稳定性。当我们配置了镜像仓库后,Maven在下载依赖包时,会优先从镜像仓库获取。如果镜像仓库中没有,再去远程仓库下载。但是,就像我们这次遇到的问题一样,如果配置不当,可能会导致无法从正确的仓库获取依赖。

(二)<mirrorOf>标签的其他用法

除了*!的组合用法,<mirrorOf>还有很多其他的用法。比如,可以指定具体的仓库ID,像<mirrorOf>central</mirrorOf>,这就表示只对中央仓库使用该镜像。也可以使用逗号分隔多个仓库ID,如<mirrorOf>central,codehaus</mirrorOf>,表示对中央仓库和codehaus仓库使用该镜像。另外,还可以使用external:*来匹配所有外部仓库(不包括localhost和文件协议的仓库),repo1,repo2表示对repo1和repo2这两个仓库使用镜像。

(三)处理三方包下载问题的通用思路

  1. 检查依赖配置:首先要确认pom文件中依赖的groupId、artifactId和version是否正确,有没有拼写错误或者版本冲突。像我们这次的问题,虽然依赖配置本身没问题,但却因为其他因素导致下载失败,所以这一步是基础且重要的。
  2. 查看本地仓库:本地仓库是依赖包的缓存地,如果本地已经有了所需的依赖包,就不需要再从远程下载。可以通过Maven命令mvn dependency:tree查看项目的依赖树,检查依赖是否存在以及版本是否正确。如果本地没有,再考虑从远程仓库下载。
  3. 检查远程仓库配置:确保项目中配置了正确的远程仓库地址,并且仓库是可用的。有些私有仓库可能需要认证信息,要检查是否配置了正确的用户名和密码。
  4. 排查镜像问题:如果配置了镜像仓库,要检查镜像配置是否合理。像我们遇到的这种情况,镜像拦截了所有请求,导致无法从正确的仓库下载依赖。可以通过修改镜像配置,或者临时禁用镜像来排查问题。

http://www.kler.cn/a/569793.html

相关文章:

  • 基于单片机和C#的电压监测系统设计
  • Docker 学习(一)
  • 如何在 FastAdmin 中实现自定义主题设计
  • 比较Spring AOP和AspectJ
  • Qt QScrollArea 总结
  • iOS UIGestureRecgonizer自动化点击埋点
  • 计算机毕设JAVA——某高校宿舍管理系统(基于SpringBoot+Vue前后端分离的项目)
  • MySql面试总结(一)
  • 鸿蒙自定义组件预览
  • linux 后台执行并输出日志
  • STM32中使用PWM对舵机控制
  • 如何在Python用Plot画出一个简单的机器人模型
  • 【自学笔记】大数据基础知识点总览-持续更新
  • P8651 [蓝桥杯 2017 省 B] 日期问题--注意日期问题中2月的天数 / if是否应该连用
  • 深度学习-10.门控循环网络
  • 《STL源码剖析》笔记记录
  • Unity中动态切换光照贴图LightProbe的方法
  • 服务流程设计和服务或端口重定向及其websocket等应用示例
  • 《Python百练成仙》31-40章(不定时更新)
  • iOS UICollectionViewCell 点击事件自动化埋点