添加 GitLab 私有存储库作为 Maven 依赖项

Posted

技术标签:

【中文标题】添加 GitLab 私有存储库作为 Maven 依赖项【英文标题】:Add GitLab private repository as Maven dependency 【发布时间】:2019-02-20 18:33:57 【问题描述】:

我在 GitLab 中有一个私有存储库(它在一个组中,并且我有一个开发人员角色),我想将它添加为我的 Maven 项目的依赖项。

我一直在寻找一段时间,我发现我必须在我的 pom.xml 中添加以下内容:

<repositories>
  <repository>
    <id>gitlab-maven</id>
    <url>https://gitlab.com/api/v4/projects/.../packages/maven</url>
  </repository>
</repositories>

<distributionManagement>
  <repository>
    <id>gitlab-maven</id>
    <url>https://gitlab.com/api/v4/projects/.../packages/maven</url>
  </repository>
  <snapshotRepository>
    <id>gitlab-maven</id>
    <url>https://gitlab.com/api/v4/projects/.../packages/maven</url>
  </snapshotRepository>
</distributionManagement>

但是,我不知道如何添加依赖项本身(使用 groupId 和其他东西),并且我不确定如何进行身份验证以允许 Maven 下载项目。我在 GitLab 中看到了一些关于个人访问令牌的内容,但我不确定如何设置它(我假设我只需要只读访问权限?)。

【问题讨论】:

dzone.com/articles/using-github-as-maven-repository 可能有助于了解您需要如何实现存储库 【参考方案1】:

首先你应该去你的项目“包和注册表”,它在你的 Gitlab 用户界面的左侧菜单中,找到包注册表按钮(如果你看不到它,请询问你的系统管理员),然后将该选项卡保持打开状态并等待将来的说明。 请注意,如果您在一家拥有 Gitlab 域的公司工作,那么在我写“https://gitlab.com”的任何地方,您都应该写下您公司的 gitlab 域。 之后,您应该通过转到“https://gitlab.com/profile”->“访问令牌”并选择 api 复选框并为您的令牌命名,例如“测试令牌”和然后按生成。 之后,在您的 java 项目中,在您的 pom.xml 附近创建文件“settings.xml”,然后将下面的代码粘贴到那里,并在那里写入您刚刚生成的令牌。上传和安装工件都需要此 settings.xml。

 <settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value>your token</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

之后转到 Gitlab 的用户界面并从那里复制您的项目 ID。见截图: 之后将以下代码粘贴到您的 pom.xml 中。这必须在应该上传到 Gitlab 的“包注册表”的项目中完成

<distributionManagement>
    <repository>
        <id>gitlab-maven</id>
        <url>https://gitlab.com/api/v4/projects/project_id/packages/maven</url>
    </repository>
    <snapshotRepository>
        <id>gitlab-maven</id>
        <url>https://gitlab.com/api/v4/projects/project_id/packages/maven</url>
    </snapshotRepository>
</distributionManagement>

要在你的 ide 中上传工件打开终端并粘贴以下命令:

mvn deploy -s settings.xml

之后,在 Gitlab 用户界面中转到您项目的“包注册表”,然后查看上传的工件。

还需要安装 settings.xml,并将以下代码粘贴到您的 pom.xml 中

<repositories>
    <repository>
        <id>gitlab-maven</id>
        <url>https://gitlab.com/api/v4/projects/project_id/packages/maven</url>
    </repository>
</repositories>

在您的终端呼叫中:mvn install -s settings.xmlmvn dependency:get -Dartifact=groupId:artifactId:version 如果安装时出现错误,请不要担心,进入本地计算机的 .m2 文件夹,找到包含新创建的工件(jar)的文件夹,将其删除,然后再次调用相同的终端命令。

【讨论】:

【参考方案2】:

首先,一些先决条件。由于您提到您使用的是私有存储库,因此您至少需要拥有 GitLab Silver(托管在 gitlab.com)或 GitLab Premium(自托管)才能使用 GitLab Maven Packages repository。此外,如果您是自托管的,则需要使用 GitLab 11.3 或更高版本(下周这个时候应该会出现),并将 packages_enabled 设置为 true(请参阅 Enabling the Packages repository)。

对于私人项目,您需要Personal Access Token。令牌应该具有api 范围,以便 Maven 将工件上传到 GitLab。获得令牌后,您可以像这样配置 settings.xml

<settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value>REPLACE_WITH_YOUR_PERSONAL_ACCESS_TOKEN</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>

pom.xml,有省略号的地方,你需要填写你的项目ID。要查找 ID,只需访问 GitLab 上项目的首页。它显示在页面顶部附近,就在项目名称和描述之后。例如,查看mvn-example 示例项目。它的项目 ID 是 8377576。在 URL 中。

<repositories>
  <repository>
    <id>gitlab-maven</id>
    <url>https://gitlab.com/api/v4/projects/8377576/packages/maven</url>
  </repository>
</repositories>

mvn-example project's pom.xml file 显示了一个完整的示例。

完成所有设置后,您应该可以使用 mvn deploy 上传工件。

【讨论】:

Gitlab 已将私有 maven 存储库功能从 EE 移至 Core。 gitlab.com/gitlab-org/gitlab/-/issues/221259#proposal

以上是关于添加 GitLab 私有存储库作为 Maven 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

让 GitLab CI 克隆私有存储库

从私有 gitlab 存储库中使用 npm 安装依赖项

无法导入私有 gitlab 存储库 [重复]

下载 GitLab 私有存储库

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

如何授予用户级别访问私有 GitLab 存储库的权限?