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>
相关推荐
什么想法都无5 分钟前
stream
java·java stream
m0_748233645 分钟前
WebService简介
java
love静思冥想6 分钟前
Stream `Collectors.toList()` 和 `Stream.toList()` 的区别(Java)
java·stream
Ch.yang25 分钟前
【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理
java·spring·代理模式
web1508509664126 分钟前
基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
java
昙鱼34 分钟前
springboot创建web项目
java·前端·spring boot·后端·spring·maven
eternal__day34 分钟前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
天之涯上上38 分钟前
JAVA开发 在 Spring Boot 中集成 Swagger
java·开发语言·spring boot
2402_8575834940 分钟前
“协同过滤技术实战”:网上书城系统的设计与实现
java·开发语言·vue.js·科技·mfc
白宇横流学长40 分钟前
基于SpringBoot的停车场管理系统设计与实现【源码+文档+部署讲解】
java·spring boot·后端