GitLab Pipeline执行unit_test任务时Maven依赖查找失败求助
问题:GitLab Pipeline中Maven无法解析GitLab Package Registry中的依赖
执行unit_test任务时出现以下错误:
Failed to execute goal on project backend: Could not resolve dependencies for project <my_package>:backend:jar:1.0.0-SNAPSHOT: Could not find artifact <my_package>:minio-service-spring-boot-starter:jar:1.0.0 in gitlab-maven (...) -> [Help 1]
该artifact已成功上传至GitLab Package Registry,版本为1.0.0,项目使用Maven构建,相关配置如下:
相关配置
pom.xml片段
<dependencies> //... <!-- MinIO Service Starter --> <dependency> <groupId>net.project.crm</groupId> <artifactId>minio-service-spring-boot-starter</artifactId> <version>${minio-service-starter.version}</version> </dependency> </dependencies> <!-- GitLab Package Registry --> <repositories> <repository> <id>gitlab-maven</id> <url>https://gitlab.com/api/v4/projects/MY_ID/packages/maven</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <distributionManagement> <repository> <id>gitlab-maven</id> <url>https://gitlab.com/api/v4/projects/MY_ID/packages/maven</url> </repository> <snapshotRepository> <id>gitlab-maven</id> <url>https://gitlab.com/api/v4/projects/MY_ID/packages/maven</url> </snapshotRepository> </distributionManagement>
ci-settings.xml(项目根目录)
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd"> <servers> <server> <id>gitlab-maven</id> <username>gitlab-ci-token</username> <password>${CI_JOB_TOKEN}</password> </server> </servers> </settings>
GitLab Pipeline任务配置
unit_test: stage: test image: name: maven:3.8-openjdk-17-slim artifacts: paths: - target/surefire-reports/ reports: junit: target/surefire-reports/*.xml expire_in: 2 days cache: key: "maven-repo" paths: - .m2/repository/ policy: pull-push script: - mvn -P!checkstyle clean test --settings=ci-settings.xml rules: - if: $CI_COMMIT_REF_PROTECTED == 'false'
排查与解决步骤
1. 验证依赖坐标一致性
- 检查错误信息中
<my_package>与pom.xml里的groupId(net.project.crm)是否完全匹配,确认MinIO starter的实际groupId是否正确。 - 确认
${minio-service-starter.version}变量值是否为1.0.0,检查pom.xml的<properties>或父pom中的变量定义。
2. 检查GitLab项目ID与跨项目权限
- 确认pom.xml中repository URL的
MY_ID是MinIO starter所在项目的数字ID(不是项目路径名)。 - 若两个项目为不同仓库:
- 在MinIO starter项目的设置→权限→项目访问中,添加当前项目为成员,赋予至少开发者权限。
- 在MinIO starter项目的设置→CI/CD→令牌权限中开启「允许作业令牌访问此项目」,同时在当前项目的CI/CD设置中开启「允许作业令牌访问其他项目」。
3. 清理Maven缓存
缓存可能存在旧的无效依赖记录,可临时调整缓存策略或清理指定依赖:
- 修改缓存策略为仅拉取:
cache: key: "maven-repo" paths: - .m2/repository/ policy: pull - 或在script中添加清理命令:
- rm -rf .m2/repository/net/project/crm/minio-service-spring-boot-starter - mvn -P!checkstyle clean test --settings=ci-settings.xml
4. 验证Maven仓库配置与令牌有效性
- 可在ci-settings.xml中添加mirror配置,确保所有请求走GitLab仓库:
<mirrors> <mirror> <id>gitlab-maven</id> <url>https://gitlab.com/api/v4/projects/MY_ID/packages/maven</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> - 临时在script中添加
echo ${CI_JOB_TOKEN}验证变量是否正常传递(测试后移除,避免泄露令牌)。
5. 本地手动测试拉取
在本地使用ci-settings.xml执行命令,验证依赖能否正常拉取:
mvn dependency:get -Dartifact=net.project.crm:minio-service-spring-boot-starter:1.0.0 --settings=ci-settings.xml
内容的提问来源于stack exchange,提问作者MAGistr
相关产品推荐
相关产品推荐

