如何让Maven 2构建旧应用时从中央仓库下载指定依赖?
解决Maven 2中concurrentlinkedhashmap 1.2依赖下载失败的问题
别担心,这个问题其实是因为concurrentlinkedhashmap:1.2的POM文件里硬编码了一个自定义仓库,但那个仓库现在要么不可用,要么压根没有这个包——好在中央仓库确实有这个依赖,我们只需要让Maven忽略它自带的仓库配置,转而去中央仓库找就行。下面给你几个可行的方案:
方案1:在项目POM里明确配置中央仓库并锁定依赖版本
首先确保你的项目POM里已经正确配置了中央仓库(如果之前被修改过,就手动加上):
<repositories> <repository> <id>central</id> <name>Maven Central Repository</name> <url>https://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
然后通过<dependencyManagement>锁定这个依赖的版本,同时显式引入它,这样Maven会优先使用你配置的中央仓库:
<dependencyManagement> <dependencies> <dependency> <groupId>com.googlecode.concurrentlinkedhashmap</groupId> <artifactId>concurrentlinkedhashmap</artifactId> <version>1.2</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.googlecode.concurrentlinkedhashmap</groupId> <artifactId>concurrentlinkedhashmap</artifactId> </dependency> </dependencies>
方案2:修改本地settings.xml强制走中央仓库镜像
如果你不想改动项目POM,可以修改本地的Maven配置文件settings.xml(一般在~/.m2/settings.xml,或者Maven安装目录下的conf/settings.xml),添加一个全局镜像,把所有仓库请求都转发到中央仓库:
<settings> <mirrors> <mirror> <id>central-mirror</id> <mirrorOf>*</mirrorOf> <url>https://repo1.maven.org/maven2</url> </mirror> </mirrors> </settings>
这样不管依赖自身配置了什么仓库,Maven都会优先用中央仓库来查找,直接绕过那个无效的仓库。
方案3:手动安装依赖到本地仓库(兜底方案)
要是上面两种方法都没搞定,你可以手动下载concurrentlinkedhashmap-1.2的JAR和POM文件,然后用Maven命令安装到本地仓库:
mvn install:install-file -Dfile=concurrentlinkedhashmap-1.2.jar -DpomFile=concurrentlinkedhashmap-1.2.pom
之后项目构建时就会直接从本地仓库拿这个依赖,不用再去远程仓库折腾了。
额外说明
其实concurrentlinkedhashmap:1.2确实在中央仓库存在,问题核心就是它自己的POM带了无效的仓库配置,导致Maven走了弯路。上面的方法都是围绕让Maven优先使用中央仓库来解决问题的,选哪个看你的场景就行。
内容的提问来源于stack exchange,提问作者SpaceTrucker
相关产品推荐
相关产品推荐

