`

解决maven工程无法获取远程仓库上的构件

阅读更多
工程结构:

test-aggregator
test-parent
test-son

其中test-aggregator是聚合工程,用于把所有子工程的构建过程串起来,并充当parent工程,定义公共的配置和变量。test-son依赖于test-parent

现象:

如果将所有工程都下载到本地,然后从task-aggregator里执行maven package,整体构建可以成功

但是如果仅下载test-son,然后从test-son里执行maven package,则构建失败,报错:
[ERROR] Failed to execute goal on project test-son: Could not resolve dependenci
es for project net.kyfxbl.test:test-son:jar:0.0.1-SNAPSHOT: Could not find artif
act net.kyfxbl.test:test-parent:jar:0.0.1-SNAPSHOT -> [Help 1]

实际上这个时候在远程仓库里已经有test-parent的构件了



当maven执行构建时,如果引入了依赖,首先会到本地仓库找,如果本地仓库找不到,则会去远程仓库找。如果远程仓库也没有找到,则构建报错

这里由于只下载了test-son,并且此前没有在本地构建过test-parent,所以本地仓库里没有test-parent的构件。但是远程仓库里明明有,却获取不到,就比较奇怪了

原因如下:

首先我们的settings.xml里配置了一个镜像,将对中央仓库的请求,转发到nexus私服上
<mirrors>
  	<mirror>
  		<id>nexus</id>
  		<name>internal nexus repository</name>
  		<url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>
  		<mirrorOf>central</mirrorOf>
  	</mirror>
  </mirrors>

然后在项目的pom里,没有配置任何远程仓库,所以就会默认使用pom4.0里的中央仓库作为远程仓库

查看pom4.0里的配置:
<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

这里关键是把<snapshots>设置为false,不允许下载SNAPSHOT版的构件,所以虽然我们已经把test-parent这个构建deploy到了私服里,但是无法被test-son下载到,因此test-son构建报错

解决方法有2个:

一个是在自己项目的pom中额外声明私服地址,把snapshots设置为true;但是这个私服地址与settings.xml里配置的镜像重复了

另一个办法是在自己项目的pom中覆盖central的配置,把snapshots设置为true
<!-- 覆盖central的设置,允许下载snapshot的构件 -->
	<repositories>
		<repository>
			<id>central</id>
			<name>Maven Central Repository</name>
			<url>http://repo1.maven.org/maven2</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>

最后综合考虑,还是选择了后一种方案
  • 大小: 136.9 KB
分享到:
评论

相关推荐

    Maven之远程仓库的配置详解

    在Maven的构建管理中,远程仓库扮演着至关重要的角色,因为它们允许开发者访问除了默认中央仓库之外的自定义或组织内部的构件。本文将深入探讨如何配置Maven的远程仓库,以便在项目中顺利获取所需的依赖。 首先,...

    maven 配置多仓库

    在软件开发中,Maven作为Java项目管理和构建工具,其依赖管理的核心机制是通过仓库(Repository)来获取项目所需的依赖库。Maven默认使用中央仓库,但有时我们需要配置多个仓库,例如私有仓库,以提高依赖下载速度或...

    maven仓库jar包

    中央仓库是最主要的远程仓库,由Sonatype维护,包含了大量的开源项目构件,它是所有Maven项目默认查找依赖的地方。 "repo"这个文件名通常指的是Maven仓库中的一个目录结构,它可能包含了多个jar包或者其他的Maven...

    设置Maven仓库-Artifactory

    如果在 pom.xml 或 setting.xml 文件中没有设置内部私有远程仓库,那么开发者机器上的这个本地仓库就会从 ibiblio.org 上的公用 Maven 仓库上同步。 本教程 Maven 仓库的用例包括:在内部仓库中创建 2 个子库,...

    maven nexus私服构件示例

    Nexus是Sonatype公司提供的一个强大的Maven仓库管理器,它不仅可以托管内部构件,避免频繁地从远程公共仓库下载依赖,还可以作为代理仓库,缓存外部依赖,提高开发效率。 在这个示例中,`user-parent`项目充当了父...

    maven本地仓库资源压缩包

    本地仓库是Maven存储已下载的依赖项、插件和其他构件的地方,使得项目构建时可以快速获取到所需的依赖,而无需每次都从远程仓库下载。 标题“maven本地仓库资源压缩包”暗示了这个压缩文件包含的是与Maven本地仓库...

    中央仓库maven的下载

    标题“中央仓库maven的下载”指的是获取和安装Maven的过程,以及如何配置Maven以连接到中央仓库,以便在开发过程中自动管理依赖。以下是对这个主题的详细说明: 1. **Maven的下载与安装**:首先,你需要访问Apache ...

    nexus构建maven仓库总结(完善版2)

    “mvn deploy”则将项目部署到远程仓库,如Nexus。 在Nexus中发布自定义构件,通常需要先在Maven项目中配置pom.xml文件,明确项目的版本、打包类型等信息,然后通过“mvn deploy”命令上传到Nexus。Nexus还提供了...

    用Artifactory管理内部Maven仓库

    - **外部公用远程仓库**:默认情况下,Maven会从ibiblio.org上的外部公共仓库同步。 #### Maven仓库概览 在没有内部Maven仓库的情况下,开发环境中的构件获取可能会受到公共仓库性能的影响,导致构建过程缓慢。而...

    maven仓库oschina

    而本地仓库是每个Maven用户在本地计算机上创建的,用于存储从中央仓库或其他远程仓库下载的构件。当Maven构建项目时,首先会检查本地仓库,如果找不到所需的依赖,就会从中央仓库或其他远程仓库下载。 OSChina ...

    maven repository

    本地仓库是Maven在本地计算机上创建的,用来缓存从远程仓库下载的依赖。远程仓库是开发者可以访问的其他服务器上的仓库,可以是公司内部的私有仓库或公开的第三方仓库。中央仓库是最主要的远程仓库,由Maven官方维护...

    apaas maven私服仓库

    本地仓库是Maven默认的存储依赖的地方,远程仓库通常是公开的Maven中央仓库,而代理仓库(即私服)则介于两者之间,起到缓存和转发的作用。 2. **搭建私服**:常见的Maven私服软件有Sonatype Nexus和JFrog ...

    Linux系统 maven私有库安装包

    Nexus是Sonatype公司开发的一款强大的Maven仓库管理器,它可以作为代理仓库,缓存远程仓库的依赖,同时也可以作为宿主仓库,存放团队内部的私有构件。Nexus提供了三种类型的仓库:代理仓库、宿主仓库和集团仓库,...

    nexus构建maven仓库总结(完善版3),添加了对第三方插件的处理和应用

    Nexus不仅能作为本地缓存,减少对远程仓库的访问,还能作为发布仓库,允许团队发布内部构件。 **二、构建Maven仓库** 1. **安装Nexus**: 首先,需要在服务器上下载并安装Nexus。根据操作系统选择相应的安装包,并...

    maven API maven API

    5. **仓库管理 (Repository Management)**: Maven使用本地仓库(Local Repository)存储项目依赖,同时与远程仓库(Remote Repository)交互,如中央仓库(Central Repository),获取或上传项目构件。 **二、Maven...

    nexus maven内部库配置安装手册

    - **代理远程仓库**:配置Nexus作为中央仓库和其他公开的Maven仓库的代理,所有构件都将从Nexus下载,Nexus会自动从外部仓库下载缺失的构件。 - **本地宿主仓库**:在服务器上建立本地的宿主仓库,用于存放组织...

Global site tag (gtag.js) - Google Analytics