在 github 存储库中托管私有 maven 工件

Posted

技术标签:

【中文标题】在 github 存储库中托管私有 maven 工件【英文标题】:Host private maven artifact in github repository 【发布时间】:2016-04-22 07:43:30 【问题描述】:

我正在使用以下解决方案 Hosting a Maven repository on github 在 github 上托管私有 maven 存储库

我已成功将 maven 工件部署到 mvn-repo 分支下的 github 存储库。

问题是我很难在其他项目中将此工件用作 maven 依赖项。我在依赖的 pom.xml 中添加了存储库设置

  <repository>
        <id>github</id>
        <name>name</name>
        <url>https://raw.github.com/repo-owner/repo-name/mvn-repo/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
        </releases>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
        </snapshots>
    </repository>

我已经配置了settings.xml文件

<server>
   <id>github</id>
  <username>github-user-name</username>
  <password>github-user-password</password>
</server>

当我尝试安装项目时,我得到关于 artifact cannot be found 的错误,当我将 artifact github 存储库设置为公共存储库时,一切正常,所以显然这是一个身份验证问题。奇怪的是我使用相同的凭据在第一步中成功地将工件部署到同一个 github 存储库。

我还尝试通过从 github 生成访问令牌并在 settings.xml 中使用它来使用“个人访问令牌”概念,如下所示:

 <server>
  <id>github</id>
  <password>personal_access_token</password>
</server>   

但是没有成功...所以基本上我已经成功在 github 存储库中创建了 maven 工件,它可以分发,但我需要它是私有存储库。

任何人都可以提供帮助,非常感谢您的回答。

【问题讨论】:

也许使用jitpack 会更容易。 【参考方案1】:

这不能单独使用 maven 完成,raw.github.com 在访问私有存储库时需要在 url 末尾有一个访问令牌,但是 maven 中没有提供此令牌的选项。

其他方式

为用户提供安装脚本

您可以为用户提供一种安装程序脚本,用于下载依赖项并将它们安装到他们的本地 maven 存储库。您可以使用以下方式在本地安装 jar:

mvn install:install-file -Dfile=<path-to-file> -DpomFile=<path-to-pomfile>

您的安装程序应该将其中一些命令捆绑在一起以获得您想要的。

相关:Guide to installing 3rd party JARs

托管您自己的 maven 依赖服务器

你不需要快速的计算机来托管 maven 项目的依赖项,我过去有一个 Raspberry PI,我使用带有 sendfile 选项的 nginx 来获得性能良好的静态文档服务器,请记住 maven 已针对本地进行了优化内容,它只下载一个文件并在剩余时间切换到其本地文件。

免责声明:我不隶属于 Raspberry PI 公司。

【讨论】:

【参考方案2】:

只需修改 github 存储库 url 格式如下:

 <repository>
    <id>github</id>
    <name>name</name>
    <url>https://github.com/repo-owner/repo-name/raw/mvn-repo/</url>
    <releases>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
    </releases>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
    </snapshots>
</repository>

谢谢!

【讨论】:

以上是关于在 github 存储库中托管私有 maven 工件的主要内容,如果未能解决你的问题,请参考以下文章

将自己的库从私有存储库发布到 maven Central

Jupyter Notebook ipynb 中的图像未显示在 GitHub 私有存储库中,但相同的代码适用于公共存储库

如何指定要从私有 github 存储库中提取的 gem?

如何在私有 GitLab 存储库中使用 Go

如何使用 GitHub REST API 通过我的个人访问令牌访问组织拥有的私有存储库中的文件数据?

使用 go get 从 WSL 2 上的私有 github 存储库中获取依赖项