Maven 不会从 Google Artifact 注册表下载父级

问题描述 投票:0回答:1

我有一个项目正在从自托管 Nexus 迁移到 Google Artifact Registry。迁移很顺利,直到我解决了对父母的依赖问题。

一切都在 ubuntu-22.04 上的 GitActions 中运行。

我有一个项目,它构建并部署为 POM 文件,如下所示:

mvn deploy:deploy-file -Dpackaging=pom -Dfile=$svcname-$version.pom -DrepositoryId=${{ inputs.maven-registry-type }} -Durl=${{ inputs.maven-registry }} -DgroupId="$grpname" -DartifactId="$svcname" -Dversion="$revision"

我可以看到该包出现在 GCR 中。效果很好。

接下来,另一个项目(另一个存储库)需要这个包并且必须将其用作父包。 在我的 pom.xml 文件中,我有:

<parent>
        <groupId>com.company.name</groupId>
        <artifactId>common-parent</artifactId>
        <version>VERSRION</version>
</parent>

    <repositories>
        <repository>
            <id>common-parent</id>
            <url>artifactregistry://region-maven.pkg.dev/project/common-parent</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <build>
        <extensions>
            <extension>
                <groupId>com.google.cloud.artifactregistry</groupId>
                <artifactId>artifactregistry-maven-wagon</artifactId>
                <version>2.2.1</version>
            </extension>
        </extensions>
    </build>

Nexus 的软件包运行良好!但GCR不想下载。我收到错误:

Cannot access artifactregistry://region-maven.pkg.dev/project/common-parent with type default using the available connector factories: BasicRepositoryConnectorFactory and 'parent.relativePath' points at wrong local POM @ line 10, column 10'

本地行为相同,直到我手动安装父包。对于 Nexus,我没有单独安装它。

我在玩游戏时注意到,如果我将包放入依赖项中 - 它将被下载,但作为父级不起作用。

我错过了什么?

更新: 我看到了通过将空的 parent.relativePath 添加到 pom.xml

可能修复的问题
<parent>
  ...
  <relativePath />
</parent>

没有帮助。

此外,没有帮助添加到maven -U的技巧,例如:

mvn install -U

但是,我找到了解决方案,它就在答案中。

java maven google-cloud-platform github-actions nexus
1个回答
0
投票

经过几个小时的调查,我在调试中运行了 Maven

mvn package -U -X

并在输出中得到详细的错误:

Caused by: org.eclipse.aether.transfer.NoTransporterException: Unsupported transport protocol artifactregistry
    at org.eclipse.aether.transport.wagon.WagonTransporter.<init> (WagonTransporter.java:131)
    at org.eclipse.aether.transport.wagon.WagonTransporterFactory.newInstance (WagonTransporterFactory.java:116)
    at org.eclipse.aether.internal.impl.DefaultTransporterProvider.newTransporter (DefaultTransporterProvider.java:104)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.<init> (BasicRepositoryConnector.java:129)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory.newInstance (BasicRepositoryConnectorFactory.java:155)
    at org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider.newRepositoryConnector (DefaultRepositoryConnectorProvider.java:107)

此错误向我指出了 2021 年开放的 git 问题wagon 未加载父 pom 解析。最终,在官方文档页面上指出:

Maven 在应用 pom.xml 中定义的 wagon 之前解决了一些依赖关系,包括:

  • 子 Maven 项目中使用该元素对父项目的引用。
  • 存储在 ArtifactRegistry 中的插件依赖项。

好的,所以,父级正是我的情况,解决方案是将文件 extensions.xml 添加到项目文件夹 .mvn 中:

<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId>com.google.cloud.artifactregistry</groupId>
    <artifactId>artifactregistry-maven-wagon</artifactId>
    <version>2.2.1</version>
  </extension>
</extensions>
© www.soinside.com 2019 - 2024. All rights reserved.