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>
相关推荐
Themberfue8 分钟前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
TheManba16 分钟前
04. maven 三种项目打包方式 pom、jar、war 的区别(记一次 Spring 项目启动报错)
spring·maven·jar
深山夕照深秋雨mo17 分钟前
在Java中操作Redis
java·开发语言·redis
努力的布布22 分钟前
SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
java·后端·spring
xujinwei_gingko23 分钟前
Spring MVC 常用注解
java·spring·mvc
PacosonSWJTU27 分钟前
spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
java·后端·springmvc
PacosonSWJTU29 分钟前
spring揭秘26-springmvc06-springmvc注解驱动的web应用
java·spring·springmvc
原野心存1 小时前
java基础进阶——继承、多态、异常捕获(2)
java·java基础知识·java代码审计
进阶的架构师1 小时前
互联网Java工程师面试题及答案整理(2024年最新版)
java·开发语言
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现各种限流算法——固定时间窗、滑动时间窗、令牌桶算法、漏桶算法
java·后端·算法·spring cloud·微服务·架构