Maven下载失败企业私服篇

同期文章:Maven玄学做法系列 - 掘金 (juejin.cn)

Maven在开发者日常工作中不可或缺,最重要的是帮助开发者快速搭建项目框架,管理项目的依赖关系。之前用到的都是阿里云的maven公共库,现在进入到企业的私服中,一些经验就有些水土不服。

因此写一篇文章给各位在企业级开发遇到Maven相关问题时一些解决问题的参考。

一、maven下载包失败

正常的maven依赖下载失败,我是有一套玄学做法系列的,只要做法完毕,99.99%的依赖都能迎刃而解。但是在企业私服开发环境中,一些问题确实做法完毕也不太管用。

报错原文:

Could not transfer artifact 马赛克:pom:1.4.5 from/to nexus (马赛克): Certificate for <马赛克> doesn't match any of the subject alternative names:[*.马赛克.com, *.马赛克.com.cn, 马赛克.com]

进入私服可以发现,依赖包是存在的。

所以问题出现在网络连接上,办公网是可以正常联通的。问题出在了Certificate,也就是SSL证书上。

如图,我们的私服没有配置SSL证书,而IDEA默认认为这些连接不安全,所以拒绝了连接。之前一直使用阿里云的私服,而阿里云是配置了SSL证书的。所以这个问题一般出现在企业内部自建私服上。

解决方案简单粗暴,就是配置忽略这些证书校验。

解决方案

在自动下载时忽略证书校验

js 复制代码
-Dmaven.wagon.http.ssl.insecure=true
-Dmaven.wagon.http.ssl.allowall=true

在插件自动忽略证书校验

此处写入以下参数

js 复制代码
-Dmaven.wagon.http.ssl.insecure=true 
-Dmaven.wagon.http.ssl.allowall=true 
-Dmaven.wagon.http.ssl.ignore.validity.dates=true

二、本地仓库有依赖包但是依然爆红

如图所见,IDEA的maven依赖爆红

但是检查本地仓库中确实存在这个包

这个情况比较诡异,项目实际运行不受影响,刷新缓存后依赖仍然爆红。

这是因为文件夹中尽管有有效文件,但是也存在后缀为.lastUpdated的文件,导致IDEA依赖解析BUG。很可能是办公网波动时才出现这样两个文件一起存在的情形。

所以解决方案就是删除.lastUpdated文件(失败的jar包)。因为可能涉及的文件比较多,所以贴出个自动操作脚本删除仓库中后缀为lastUpdated的文件。

  1. windows操作bat脚本
bash 复制代码
set REPOSITORY_PATH=D:\software\Java\maven\repository
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
pause
  1. mac操作脚本
bash 复制代码
#!/bin/bash
REPOSITORY_PATH="/Users/****/Documents/maven"
find "$REPOSITORY_PATH" -type f -name "*lastUpdated*" -exec rm -rf {} \;
read -p "Press any key to continue..."

三、maven插件下载问题

因为旧版本的IDEA体验太差,我更新了最新版的。

根据更新必出问题定理,我的一些项目中maven所有的插件都爆红,我观察了下插件版本比较新的才会爆红,所以我个人认为是公司的私服里面没有同步新版本的插件。(我真傻,真的,其实同事都没出问题,我还把锅甩在了自家公司的私服上)

然后根据这一猜测,我在settings文件增加阿里云的镜像仓库,问题解决了,我还吐槽了下。

其实这个问题是和第一个问题是一样的,公司私服没有SSL证书,阿里云有而已。误打误撞让我解决了问题。

四、打包问题

在个人项目的开发中很少会有打包的需求,一般在企业级项目中才会出现。于是有那么一天,我打包出现了问题,就非常懵逼。

报错原文如下:

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project **** : Failed to retrieve remote metadata **** : Could not transfer metadata **** from/to nexus-snapshots (http://10.*.*.*:*/nexus/content/repositories/snapshots): Transfer failed for http://10.*.*.*:*/nexus/content/repositories/snapshots/****/
从报错内容来看,是网络连接问题。我还以为是私服网站出现了问题,后来经过排查不是私服的问题。

然后,同事就给我指出了我的一个盲点,那个连接地址。很明显,这是一个10.开头的地址。(代表着是一个生产服务器,办公网是连不上的)所以关注点除了报错原因还有我们连接的私服地址。

由此在父pom中找到了其配置。并在项目中覆盖了配置。

java 复制代码
<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://172.****/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://172.****/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>
相关推荐
木易 士心3 分钟前
Spring AI 核心架构解析:构建企业级 AI 应用的 Java 新范式
java·spring
61900833613 分钟前
linux 安装jdk
java·linux·运维
懂得节能嘛.16 分钟前
【动态配置中心】Java+Redis构建动态配置中心
java·开发语言·redis
专注于大数据技术栈17 分钟前
Java中JDK、JRE、JVM概念
java·开发语言·jvm
YuanlongWang21 分钟前
C# 基础——值类型与引用类型的本质区别
java·jvm·c#
Kay_Liang1 小时前
大语言模型如何精准调用函数—— Function Calling 系统笔记
java·大数据·spring boot·笔记·ai·langchain·tools
自由的疯1 小时前
Java 如何学习Docker
java·后端·架构
自由的疯1 小时前
Java Docker本地部署
java·后端·架构
007php0071 小时前
猿辅导Java面试真实经历与深度总结(二)
java·开发语言·python·计算机网络·面试·职场和发展·golang
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商机制 笔记34
java·spring boot·笔记·缓存