【问题标题】:How do you upload a Maven artifact to Github Packages using the command line?如何使用命令行将 Maven 工件上传到 Github Packages?
【发布时间】:2019-11-28 16:47:03
【问题描述】:

我正在尝试将尚未构建的 Maven 工件上传到我组织的 GitHub 包注册表。为此,我正在使用 deploy:deploy-file Maven 插件。这是我一直在使用的命令:

mvn deploy:deploy-file 
-Dfile=[THE JAR FILE]
-Durl=https://maven.pkg.github.com/[ORG] 
-Dregistry=https://maven.pkg.github.com/[ORG] 
-DgroupId=[GID]
-DartifactId=[ARTIFACTID] 
-Dversion=[VERSION]
-DgeneratePom=false 
-Dtoken=[MY GITHUB TOKEN]

因此,我收到来自 Github 的 401 错误。 我已经确定:

  • 我在我的组织(当前所有者)内拥有足够的权限。
  • 我使用的令牌是有效的并且具有适当的范围:我将它们全部用于测试。

另外,github 包页面说明:

<!-- Just a single step: Deploy using a GitHub token -->
$ mvn deploy -Dregistry=https://maven.pkg.github.com/[org] -Dtoken=GH_TOKEN

为什么我在 Maven 文档中找不到有关注册表或令牌参数的任何信息? 我可以在没有任何 XML 配置文件的情况下仅使用 cli 将此文件上传到组织的注册表吗?

提前致谢。

【问题讨论】:

  • 我在mvn deploy(它部署了一个空的 jar 文件)上取得了成功,但在 mvn deploy:deploy-file 上使用与您自己类似的参数时却没有成功。我只能认为魔术token参数在这种情况下没有得到使用。

标签: java maven github-package-registry


【解决方案1】:

我成功了:

mvn deploy:deploy-file -Dfile=./[JAR].jar 
    -DpomFile=./pom.xml 
    -DrepositoryId=github 
    -Durl=https://maven.pkg.github.com/[OWNER]/[REPO] 
    -Dtoken=GH_TOKEN

我的 maven 主目录中有一个 settings.xml:

<settings>
    <servers>
        <server>
        <id>github</id>
            <username>[GITHUB USERNAME]</username>
            <password>[GENERATED ACCESS TOKEN]</password>
        </server>
    </servers>
</settings>

在我的 POM 中:

...
<distributionManagement>
    <repository>
        <id>github</id>
        <name>GitHub Packages</name>
        <url>https://maven.pkg.github.com/[OWNER]/[REPO]</url>
    </repository>
</distributionManagement>
...

【讨论】:

    【解决方案2】:

    Url 也应该有一个存储库名称。

    在我的一个项目中,我在 pom.xml 中有这个

    <distributionManagement>
        <repository>
            <id>github</id>
            <url>https://maven.pkg.github.com/stirante/lol-client-java-api</url>
        </repository>
    </distributionManagement>
    

    【讨论】:

    • 嗯,我希望会有一个“组织范围”的包注册表,写在组织的包选项卡中的示例命令(我在上面发布)似乎证实了这一点。该错误很可能来自错误的 url,或者可能来自我保留默认设置的“远程存储库”选项。
    【解决方案3】:

    为了解决 repo 问题 - 因为我不希望每个包都发布到不同的 repo,所以我创建了一个名为 packages 的 repo 并将所有其他 repo 中的包发布到它,使用相同的配置在其他两个答案中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-15
      • 2011-07-03
      • 2016-07-13
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2017-01-18
      相关资源
      最近更新 更多