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 &lt;artifact&gt;.jar 工作。

对于库,这些只是 jar-with-dependencies,因此初学者不必学习手动管理依赖项。

【问题讨论】:

【参考方案1】:

只要您看到的是&lt;my username&gt;:********@github.com 而不是git:********@github.com,您的 SSH 密钥就无法在 GitHub 上对您进行身份验证。

GitHub SSH URL总是使用远程用户“git”,从不使用“&lt;my username&gt;”。 检查发布的 manven 插件是否使用用户名服务器设置,这可以解释为什么你会看到你的用户名。

【讨论】:

我将 settings.xml 更改为使用 git 现在我收到 401 未经授权的错误:无法执行目标 org.apache.maven.plugins:maven-deploy-plugin: 3.0.0-M1:deploy (default-deploy)... 401 Unauthorized -> [Help 1] @user1456735 是否也像您原来的问题一样处于推送阶段?我觉得用户名不应该改成git。 @user1456735 我刚刚看到您的编辑:用户名必须保持不变。但是推送的时候应该使用developerConnection。 好像没有使用developerConnection。它正在使用 distributionManagement 存储库 (maven.pkg.github.com)。我认为 ssh/git 连接正在工作(例如,站点:部署)。只是发布插件使用了这个 https 连接并且失败了。

以上是关于maven 发布/部署到 github 包的主要内容,如果未能解决你的问题,请参考以下文章

通过GitHub Action自动部署Maven项目

pagehelper的使用

将 Maven 项目发布到 Github 包

github操作中的Maven部署不断失败,但在本地运行良好

GitHub建立个人Maven仓库

利用github搭建私人maven仓库