【问题标题】:How to fetch maven plugin from Github packages?如何从 Github 包中获取 maven 插件?
【发布时间】:2021-08-18 21:47:07
【问题描述】:

我已经成功地将一个 java 包部署到 Github 包,我尝试将它成功作为依赖项使用:

<dependency>
      <groupId>com.example</groupId>
      <artifactId>demo</artifactId>
      <version>1.0.0-SNAPSHOT</version>
</dependency>

但我无法像这样将它解析(获取)为 maven 插件:

<build>
    <plugins>
      <plugin>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
      </plugin>
...

我收到此错误:

Plugin com.example:demo:1.0.0-SNAPSHOT or one of its dependencies could not be resolved:
Could not find artifact com.example:demo:1.0.0-SNAPSHOT -> [Help 1]

.m2/settings.xlm 也已准备就绪并且工作正常,因为我通过将包作为依赖项而不是插件获取包来测试它,它包含:

<server>
      <id>github</id>
      <username>USER</username>
      <password>PERSONAL_TOKEN_SCOPE_REPO_W_R_PACKAGES</password>
</server>
<profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>github</id>
          <name>GitHub OWNER Apache Maven Packages</name>
          <url>https://maven.pkg.github.com/OWNER/REPO-NAME</url>
          <releases>
              <enabled>true</enabled>
          </releases>
          <snapshots>
            <updatePolicy>always</updatePolicy>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
</profile>
<activeProfiles>
    <activeProfile>github</activeProfile>
</activeProfiles>

有什么想法吗?提前致谢

【问题讨论】:

    标签: java maven github github-actions github-package-registry


    【解决方案1】:

    我发现了如何正确配置它。

    您可以看到一个示例项目,其中包含有效的 GitHub Actions CI 和 GitHub 包注册表here

    要查看如何包含依赖项,请检查: ?GitHub-plugin-registry-example Template

    诀窍是在全局 maven settings.xml 中向 GitHub API 添加身份验证。

    <servers>
        <server>
            <id>github</id>
            <username>YOUR_USERNAME</username>
            <password>YOUR_AUTH_TOKEN</password>
        </server>
    </servers>
    

    YOUR_USERNAME 替换为您的 GitHub 登录名。 将 YOUR_AUTH_TOKEN 替换为生成的 GitHub 个人访问令牌: GitHub > 设置 > 开发者设置 > 个人访问令牌 > 生成新令牌: 令牌至少需要 read:packages 范围。否则你会得到一个未授权的异常。

    不清楚是否也需要此身份验证才能读取包。特别是因为jar包页面无需登录即可使用:https://github.com/TobseF/HelloMaven/packages

    所以这有点讨厌,因为我们必须添加 github...并希望其他人也将提供带有 github id 的存储库。否则,我们必须为每个 github 依赖项添加服务器配置。

    请记住,每个 GitHub 存储库都是它自己的 maven 存储库。所以没有像 maven Central 这样的全局注册表。每个依赖项都必须提供自己的存储库链接声明。

    但结合 GitHub Actions CI,它是一个非常好的选择,无需任何第三方插件。

    【讨论】:

    • 谢谢@boetis。我注意到您的意思是“依赖项”而不是“插件”,因为我成功地能够获取依赖项,但我无法将包作为插件获取。我没听错吗?
    • 是的,对不起。我犯了一个错误。如果我的回答对您有帮助,请勾选并投票,以便对社区有所帮助。
    • 不幸的是,您的答案非常适合获取依赖项,但不是我需要的插件。我的问题不是身份验证问题,正如我所说,我通过从同一个 repo 获取依赖项来测试我的 标记并且它是成功的,并且用户作为所有者和密码作为具有范围 repo + package(w/r) 的令牌。
    • 您好,非常感谢您的帮助。我发布了我的解决方案,也许你想检查一下。祝你有美好的一天。
    【解决方案2】:

    尤里卡!对于获取插件,我们应该使用&lt;pluginRepositories&gt; 而不是用于获取依赖项的&lt;repositories&gt;

    记住:pluginRepositories 包含与远程存储库建立连接所需的信息。

    我的设置是正确的,我只需要在&lt;profile&gt; 中添加这个部分:

    <pluginRepositories>
         <pluginRepository>
              <id>github</id>
              <name>GitHub OWNER Apache Maven Packages</name>
              <url>https://maven.pkg.github.com/OWNER/REPO-NAME</url>
    
              <!-- next elements are up to you -->
              <releases>
                  <enabled>true</enabled>
              </releases>
              <snapshots>
                <updatePolicy>always</updatePolicy>
                <enabled>true</enabled>
              </snapshots>
         </pluginRepository>
    </pluginRepositories>
    

    查看示例~/.m2/settings.xml here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2021-02-18
      相关资源
      最近更新 更多