通过GitHub Actions部署Maven多模块项目失败求助
解决多模块Maven项目部署GitHub Packages失败问题
问题分析
核心问题是distributionManagement的URL配置错误:父pom中使用${project.artifactId}作为GitHub Packages仓库路径,子模块构建时会将该变量替换为自身的artifactId,导致构件被上传到子模块名称对应的Packages仓库(而非父项目的GitHub仓库)。而Maven验证部署时会去父项目对应的仓库查找,自然找不到已上传的子模块构件,最终触发报错。
修复步骤
1. 修正父pom的distributionManagement配置
将URL中的${project.artifactId}替换为你的GitHub仓库名称(即父模块的artifactId,比如你的GitHub仓库是mathiasbosman/fs-core,则URL固定为该路径):
<distributionManagement> <!-- Github distribution --> <repository> <id>github</id> <name>GitHub Packages</name> <!-- 替换为你的GitHub仓库路径,不要用${project.artifactId} --> <url>https://maven.pkg.github.com/MYUSERNAME/my-artifact</url> </repository> </distributionManagement>
所有子模块会继承父pom的配置,统一上传到父项目对应的GitHub Packages仓库。
2. 完善GitHub Action的Java配置
在setup-java步骤中添加Maven服务器认证配置,确保GITHUB_TOKEN能正确访问GitHub Packages:
- uses: actions/setup-java@v3 with: java-version: 17 distribution: adopt cache: maven server-id: github # 与pom中repository的id对应 server-password: ${{ secrets.GITHUB_TOKEN }} # 用GitHub Action内置token做认证
该配置会自动生成Maven settings.xml,将github服务器的认证信息设置为GITHUB_TOKEN,无需手动编写settings文件。
3. 验证release命令
保持原有的release命令不变(你的SCM配置已正确):
mvn -B release:prepare mvn -B release:perform
额外说明
- GitHub Packages的Maven仓库与GitHub代码仓库一一绑定,所有子模块构件必须上传到父项目对应的Packages仓库,不能分散到子模块名称的仓库。
- 你的
GITHUB_TOKEN已拥有packages:write权限(在Action的permissions中配置),无需额外申请权限。
内容的提问来源于stack exchange,提问作者mathiasb
相关产品推荐
相关产品推荐

