Maven仓库Jar路径不规范导致maven install无法下载Jar的咨询
可行变通方案(不修改现有远端Maven仓库结构)
Maven的仓库路径布局是内置固定规则,无法通过配置修改依赖拉取的路径匹配逻辑,以下3种方案均可绕过远端路径错误的问题实现包的正常使用:
- 方案1:手动将jar安装到本地Maven仓库
先把存放在错误路径的test-1.0.0.jar下载到本地任意目录,执行如下maven命令:
命令执行完成后,Maven会自动在本地仓库按照标准目录结构生成对应包和元数据文件,后续执行mvn install:install-file -Dfile=/your/local/path/test-1.0.0.jar -DgroupId=com.java.test -DartifactId=test -Dversion=1.0.0 -Dpackaging=jarmvn install、mvn package等命令时会直接命中本地仓库的依赖,不会再向远端仓库发起该包的拉取请求,完全不受远端路径错误影响。这个方案适合个人开发场景,操作成本最低。 - 方案2:使用system作用域直接引用本地jar
在项目根目录新建lib文件夹,把test-1.0.0.jar放进去,在pom.xml中按如下方式声明依赖:
这种方式不需要操作本地Maven仓库,依赖跟随项目走,SpringBoot等使用fatjar打包模式的项目会自动将该依赖打入最终产物,普通war包项目只需配置maven-war插件将lib目录下的包纳入打包资源即可。缺点是团队协作时所有成员都需要保留项目内lib目录下的jar文件,否则会报依赖找不到的错误。<dependency> <groupId>com.java.test</groupId> <artifactId>test</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/test-1.0.0.jar</systemPath> </dependency> - 方案3:通过私有Maven代理做路径映射(适合团队场景)
搭建Nexus、Artifactory这类私有Maven代理仓库,在代理层配置路由规则:将com/java/test/test/1.0.0/路径下的jar拉取请求,直接映射到远端仓库com/java/test/test-1.0.0.jar的实际地址。代理拉取到jar后会按照Maven标准结构缓存,所有团队成员只需要把maven的settings.xml地址配置为私有代理仓库地址,就可以正常拉取依赖,不需要每个成员单独做本地配置。
注意:不要尝试修改依赖的groupId、artifactId、version去适配远端错误路径,Maven的路径拼接规则是固定的
groupId/artifactId/version/artifactId-version.jar,修改坐标只会让Maven去匹配其他不存在的路径,根本无法命中直接放在group路径下的jar包。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

