我有一个项目正在从自托管 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
但是,我找到了解决方案,它就在答案中。
经过几个小时的调查,我在调试中运行了 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 之前解决了一些依赖关系,包括:
好的,所以,父级正是我的情况,解决方案是将文件 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>