nexus私服依赖报错Failure to find xxx.xxx:pom:1.0-SNAPSHOT

当公司搭建了自己的Maven私服后,遇到首次上传依赖后其他项目获取报错的情况。问题在于父项目pom.xml没有上传到私服,导致子项目找不到依赖。解决方案是直接将父项目的pom.xml通过Maven的deploy命令上传到私服,即使子项目有报错也不影响。这样可以确保所有必要的依赖都可被正确引用。

        公司搭建了自己的私服,首次上传依赖后,其他项目获取依赖总是报错,仔细核对上传的jar包依赖版本和名称,当然,都没有问题。我这边的项目结构是父子类型的,都是Maven项目:

父项目:wmss

子项目:wmss-common、wmss-ejb、wmss-web

反复盯着报错看了一会:

Failure to find com.huny.pro:wmss:pom:1.0-SNAPSHOT in http://nexus.huny.cn:90/content/repositories/snapshots/ was cached in the local repository

我发现一个被我忽略的问题,报错中并非是哪一个jar 包的报错,而是pom 引用报错。恍然大悟, 父项目 wmss 下的 pom.xml 文件也是要上传到私服的,因为子项目中引用了父项目的依赖,就是子项目pom.xml中配置的<parent>标签时引用的 ,例如我这边:

    <parent>
        <groupId>com.huny.pro</groupId>
        <artifactId>wmss</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../wmss/pom.xml</relativePath>
    </parent>

知道原因就可以解决了:

直接在eclipse中操作一下上传到私服,选择 pom.xml文件,右键菜单中选择 Run As > Maven build(后面有快捷键显示那个),会打开输入maven 命令的页面:

 在下面的页面输入 Maven上传命令 deploy (发布),然后点击“Apply” > "Run",上传就完了。

 注意:上传这个操作不用管下面的子项目是否有报错,子项目上传不成功不影响父项目 pom文件上传。

<think> 我们面对的问题是Maven构建错误:Non-resolvable parent POM for com.rrd:main:1.0-SNAPSHOT,原因是找不到父模块com.rrd:ims:pom:1.0-SNAPSHOT,并且parent.relativePath指向了错误的本地POM。根据引用中的多个案例和解决方法,我们可以总结出以下步骤来解决: 1. **确认父模块是否存在并正确**:首先确保父模块(com.rrd:ims:1.0-SNAPSHOT)确实存在,并且其pom.xml文件正确。父模块需要先构建并安装到本地仓库或远程仓库。 2. **检查relativePath设置**:在子模块的pom.xml中,<parent>元素内有一个<relativePath>元素,用来指定父模块pom.xml的相对路径。默认值是../pom.xml,即上级目录。如果父模块不在默认位置,需要正确指定路径。如果父模块在本地仓库中,则<relativePath>可以留空(表示不查找本地路径,直接从仓库获取)或者指向正确的本地路径。但根据错误信息,这里指向了错误的本地POM,所以需要调整。 3. **安装父模块**:如果父模块还未安装到本地仓库,需要先进入父模块目录,执行`mvn install`(或者`mvn clean install`)将其安装到本地仓库。这样当子模块构建时,Maven就能在本地仓库找到它。 4. **避免循环依赖**:如果父模块和子模块之间存在循环依赖(如父模块的构建需要子模块先构建,而子模块又需要父模块先构建),则会出现问题。这时需要先构建父模块(可能暂时移除子模块的依赖),然后再构建子模块。参考引用[3]中的解决方法:在父工程中暂时删除子模块的声明(即<modules>部分),先安装父工程,然后再添加回来构建子工程。 5. **检查Maven配置**:引用[4]中提到可能是Maven的setting.xml配置文件有问题。检查你的Maven配置文件(通常是~/.m2/settings.xml)是否正确,尤其是仓库的配置(如镜像、仓库地址)。可以尝试使用同事的settings.xml文件替换测试。 6. **清理本地仓库缓存**:有时候本地仓库缓存会导致问题,可以尝试删除本地仓库中相关构件(如com/rrd/ims/1.0-SNAPSHOT目录)并重新构建。或者使用`mvn clean install -U`命令(-U参数强制更新快照依赖)。 7. **检查版本号和仓库**:确保父模块和子模块的版本号一致(都是1.0-SNAPSHOT)。同时,确认Maven仓库(本地和远程)中确实存在该版本的父模块。 具体步骤建议: 步骤1:检查父模块(ims)的pom.xml文件,确保其正确性,特别是groupId、artifactId和version。然后,在父模块目录下运行: mvn clean install 步骤2:检查子模块(main)的pom.xml中<parent>部分: <parent> <groupId>com.rrd</groupId> <artifactId>ims</artifactId> <version>1.0-SNAPSHOT</version> <!-- 如果父模块pom.xml不在默认的../pom.xml位置,则需要指定relativePath --> <relativePath>../ims/pom.xml</relativePath> <!-- 这里根据实际路径调整 --> </parent> 注意:如果父模块就在子模块的上级目录(即父模块的pom.xml和子模块所在的目录是平级),那么relativePath应该是../pom.xml。如果父模块在一个名为ims的目录中,且该目录与子模块的父目录平级,则如上所示。 步骤3:如果步骤1中安装父模块失败,并且错误信息显示是因为子模块的原因(循环依赖),则按照引用[3]的方法: - 在父模块的pom.xml中暂时移除子模块(main)的<module>声明。 - 然后重新安装父模块:mvn clean install - 安装成功后,再将子模块添加回父模块的pom.xml中。 - 最后构建子模块。 步骤4:如果上述步骤无效,尝试清理本地仓库缓存: 手动删除本地仓库中com/rrd/ims/1.0-SNAPSHOT目录(或者整个com/rrd/ims),然后重新执行安装父模块。 步骤5:检查Maven配置(settings.xml)是否正确,特别是仓库镜像设置。确保aliyun等镜像配置正确,或者尝试更换为其他镜像。 根据错误信息,我们注意到之前的引用中提到了aliyun仓库(如引用[1]和[2]),所以请确保在settings.xml中正确配置了镜像,并且该镜像仓库中包含所需的依赖。 如果问题仍然存在,请提供更多上下文信息,例如项目结构(父模块和子模块的目录结构)和相关的pom.xml片段。 下面提供一个示例项目结构供参考: ``` project-root/ ims/ (父模块) pom.xml <!-- 父模块的pom,其中packaging为pom,并且声明了子模块<module>../main</module> --> main/ (子模块) pom.xml <!-- 子模块的pom中指定parent为com.rrd:ims:1.0-SNAPSHOT,并且relativePath为../ims/pom.xml --> ``` 注意:在父模块的pom.xml中,通常会通过<modules>指定子模块,例如: <modules> <module>../main</module> </modules> 这样,在项目根目录下执行mvn命令时,Maven会识别父模块并构建所有子模块。 希望这些步骤能帮助你解决问题。 </think> 根据引用内容和Maven项目结构特点,解决"Non-resolvable parent POM"问题需要以下步骤: ### 解决方案 1. **确认父模块位置** 在子模块(`com.rrd:main`)的`pom.xml`中,检查`<parent>`元素的`<relativePath>`设置: ```xml <parent> <groupId>com.rrd</groupId> <artifactId>ims</artifactId> <version>1.0-SNAPSHOT</version> <!-- 修正路径指向父POM实际位置 --> <relativePath>../ims/pom.xml</relativePath> </parent> ``` 若父模块在同一层级目录,建议设置为`../pom.xml`;若在上级目录则保留空(默认值)[^3]。 2. **优先安装父模块** ```bash # 进入父模块目录 cd path/to/ims-module # 安装父模块到本地仓库 mvn clean install -N # -N表示不构建子模块 ``` 必须先成功安装父模块`com.rrd:ims`后,子模块才能解析依赖[^3][^4]。 3. **处理循环依赖(关键步骤)** 若父子模块相互引用导致安装失败: - 临时移除父模块`pom.xml`中的子模块声明: ```xml <!-- 在父pom中注释掉子模块 --> <!-- <modules> <module>main</module> </modules> --> ``` - 安装父模块:`mvn clean install` - 恢复子模块声明,再构建子模块[^3]。 4. **检查仓库配置** - 验证`settings.xml`中的镜像配置(如阿里云仓库): ```xml <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror> ``` - 强制更新依赖:`mvn clean install -U`[^1][^4]。 5. **清理本地仓库缓存** 删除本地仓库中损坏的依赖: ```bash rm -rf ~/.m2/repository/com/rrd/ims/1.0-SNAPSHOT/ ``` ### 项目结构建议 ``` project-root/ ├── ims/ # 父模块 │ ├── pom.xml # packaging必须为<pom> ├── main/ # 子模块 │ ├── pom.xml # 通过<parent>引用ims ``` > **注意**:父模块的`packaging`类型必须为`pom`,否则无法作为父工程被继承[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值