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>
相关推荐
小冉在学习12 分钟前
day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)
java·算法·图论
代码之光_19801 小时前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi1 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
StayInLove1 小时前
G1垃圾回收器日志详解
java·开发语言
对许1 小时前
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
java·log4j
无尽的大道1 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
小鑫记得努力2 小时前
Java类和对象(下篇)
java
binishuaio2 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE2 小时前
【Java SE】StringBuffer
java·开发语言
老友@2 小时前
aspose如何获取PPT放映页“切换”的“持续时间”值
java·powerpoint·aspose