maven 发布/部署到 github 包
Posted
技术标签:
【中文标题】maven 发布/部署到 github 包【英文标题】:maven release/deploy to github packages 【发布时间】:2020-11-03 07:35:25 【问题描述】:我正在尝试将我的 javadocs 发布到 gh-pages 并将 maven 存储库发布到 github maven 存储库。该站点似乎部署正常,但发布插件失败。似乎找不到我配置的 github 凭据。这是 maven 插件中的一个错误,还是我没有指定正确的凭据?
pom.xml:
<scm>
<url>https://github.com/$repo.user/$repo.name</url>
<connection>scm:git:ssh://git@github.com/$repo.user/$repo.name.git</connection>
<developerConnection>scm:git:ssh://git@github.com/$repo.user/$repo.name.git</developerConnection>
<tag>HEAD</tag>
</scm>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub</name>
<url>https://maven.pkg.github.com/$repo.user/$repo.name</url>
</repository>
<site>
<id>gh-pages</id>
<name>Github</name>
<url>scm:git:ssh://git@github.com/$repo.user/$repo.name.git</url>
</site>
</distributionManagement>
settings.xml:
<settings>
<servers>
<server>
<id>github</id>
<username>$env.GITHUB_API_USERNAME</username>
<password>$env.GITHUB_API_KEY</password>
</server>
<server>
<id>gh-pages</id>
<username>git</username>
<configuration>
<scmVersionType>branch</scmVersionType>
<scmVersion>gh-pages</scmVersion>
</configuration>
</server>
</servers>
</settings>
~/.ssh/config:
Host *
Hostname github.com
User git
IdentityFile ~/.ssh/git_ecdsa
输出,mvn 发布:准备:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:3.0.0-M1:prepare (default-cli) on project ia: Unable to tag SCM
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] Pseudo-terminal will not be allocated because stdin is not a terminal.
[ERROR] Warning: Permanently added the RSA host key for IP address '140.82.112.4' to the list of known hosts.
[ERROR] <my username>:********@github.com: Permission denied (publickey).
[ERROR] fatal: Could not read from remote repository.
[ERROR]
[ERROR] Please make sure you have the correct access rights
[ERROR] and the repository exists.
[ERROR]
[ERROR] -> [Help 1]
编辑: 将 settings.xml 更改为使用 'git' 用户名会导致此错误:
[WARNING] Could not transfer metadata com.<user>:<repo>:<version>-SNAPSHOT/maven-metadata.xml from/to github (https://maven.pkg.github.com/<User>/<Repo>): Authentication failed for https://maven.pkg.github.com/<User>/<Repo>/com/<user>/<repo>/<version>-SNAPSHOT/maven-metadata.xml 401 Unauthorized
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy (default-deploy)
编辑: 如果有帮助,公司母公司 POM(我目前工作的地方)就在这里: https://github.com/InnovAnon-Inc/IA
这里有一个“简单”的子项目: https://github.com/InnovAnon-Inc/SimpleJavaPrograms
父 POM 应该是一个相当简单和通用的...希望那里没有太奇怪的事情发生。
子项目很奇怪:一位开发人员是初学者,使用的是玩具 IDE。我希望项目和测试能够在该 IDE 中运行,因此它使用“简单”目录结构,而不是标准目录结构。此外,我希望能够通过运行单元测试、创建易于使用的工件以及部署文档和工件的开发运维管道来运行这个项目。这样,初学者不必学习任何课外主题,例如构建系统,就可以从测试驱动的开发策略中受益。协作也会更简单,因为我将能够查看测试结果、堆栈跟踪和当前源代码。
编辑: 我对任何将这些 FOSS 工件部署到免费存储库的解决方案感到满意,因此它们可以与 Maven 一起使用。
最后,我想部署三样东西:
-
网站/javadocs 到 gh-pages
maven repo 的正常 maven 工件
github 发布/下载的(可能是可执行的)jar-with-dependencies
第二个部署目标处理正常的企业级用例:客户端代码使用 maven 构建并简单地声明依赖关系。
第三个部署目标处理简单的初学者级用例:用户手动下载 jar-with-dependencies。
对于应用程序,它们被打包为带有适当清单的可执行 jar,以便 java -jar <artifact>.jar
工作。
对于库,这些只是 jar-with-dependencies,因此初学者不必学习手动管理依赖项。
【问题讨论】:
【参考方案1】:只要您看到的是<my username>:********@github.com
而不是git:********@github.com
,您的 SSH 密钥就无法在 GitHub 上对您进行身份验证。
GitHub SSH URL总是使用远程用户“git
”,从不使用“<my username>
”。
检查发布的 manven 插件是否使用用户名服务器设置,这可以解释为什么你会看到你的用户名。
【讨论】:
我将 settings.xml 更改为使用以上是关于maven 发布/部署到 github 包的主要内容,如果未能解决你的问题,请参考以下文章