记录上传maven依赖包到github仓库问题
- 利用GitHubPackages作为依赖的存储库
- 踩坑1 仓库地址问题
- 踩坑2 Personal access tokens
- 正确姿势
- 一、创建一个普通仓库,比如我这里是fork的腾讯Shadow到本地。地址是:https://github.com/dhs964057117/Shadow
- 二、生成一个Personal access tokens
- 1.点击头像——点击settings
- 2. 找到左侧Developer settings
- 3. 展开点击Tokens(classic)
- 4. 上传依赖packages
利用GitHubPackages作为依赖的存储库
背景:
最近在学习腾讯的Shadow插件框架,fork并clone开源框架到自己的仓库,做了自定义定制化修改后,准备将sdk打成jar上传到github上方便其他项目直接依赖使用。
但是之前没有在github上搭建maven仓库的经验,于是踩坑无数。
踩坑1 仓库地址问题
一开始直接新建了一个普通仓库,然后配置仓库地址,https://github.com/dhs964057117/maven-repository使用gradle Maven插件上传,直接报错Forbidden 403。
Could not PUT ‘https://github.com/dhs964057117/Shadow/com/tencent/shadow/core/transform/1.0.0/transform-1.0.0.jar’. Received status code 403 from server: Forbidden
然后看网上各种说因为要支持上传下载不能用https://github.com/(用户名)/(仓库)(比如我这里是https://github.com/dhs964057117/maven-repository)。
得用https://raw.github.com/dhs964057117/maven-repository,继续报错503。
Could not PUT ‘https://raw.github.com/dhs964057117/Shadow/com/tencent/shadow/core/transform/1.0.0/transform-1.0.0.jar’. Received status code 503 from server: client read error
然后百度又说github迁移了不是这个地址,改为:https://raw.githubusercontent.com/dhs964057117/maven-repository/main。
结果还是不行报错:
最后看到说要利用GithubPackages来作为存储库,也就是平时看到仓库里这里的packages:
地址要改为https://maven.pkg.github.com/dhs964057117/maven-repository/
但是仍然报错
Execution failed for task ‘:publishTransformPublicationToGitHubPackagesRepository’.
Failed to publish publication ‘transform’ to repository ‘GitHubPackages’
Could not PUT ‘https://maven.pkg.github.com/dhs964057117/Shadow/com/tencent/shadow/core/transform/1.0.0/transform-1.0.0.jar’. Received status code 422 from server: Unprocessable Entity
最后没办法,我直接发布到本地,然后在git push上去,结果代码是有了,但是死活拉不下来,最后放弃。
踩坑2 Personal access tokens
没有配置Personal access tokens (classic),导致没有权限,也会报错403
正确姿势
一、创建一个普通仓库,比如我这里是fork的腾讯Shadow到本地。地址是:https://github.com/dhs964057117/Shadow
二、生成一个Personal access tokens
1.点击头像——点击settings
2. 找到左侧Developer settings
3. 展开点击Tokens(classic)
然后生成一个密钥填进去就行,生成token的时候会提醒你保存一个密码,记得保存到本地,后面会用到。
4. 上传依赖packages
比如我这个shadow框架里人家写的maven配置是:
maven {
name = "GitHubPackages"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
url "https://maven.pkg.github.com/" + "${System.env.GITHUB_REPOSITORY}".toLowerCase()
}
这里name可以不改
credentials {
username = username(改成你的github用户名)
password = token(刚才上面第三步最后保存的那个密码)
}
url "https://maven.pkg.github.com/dhs964057117/Shadow/packages/"
这里改成"https://maven.pkg.github.com/${username}(你的用户名)/${repositoryUrl}(你的仓库地址)/packages/
//后面一定要加packages
比如我这里就是:https://maven.pkg.github.com/dhs964057117/Shadow/packages/
然后publish,成功!!可以看到右边packages这里有东西了,最后效果:
在别的项目用到的话,配置maven地址跟上面一样
然后就可以下载了
不过这里有个缺陷,上面生成的那个key权限太高,可以读写你的仓库内容,也就是说你这个Key不能暴露出去,不然别人可以随意的发布修改。如果要提供给别人只能下载你的依赖,可以再生成一个Key只授予read权限即可