我按照说明配置了一个maven客户端以使用Artifact Registry。我能够成功地将我的根pom部署到它;然而,当我有一个从根pom继承的独立项目时,它无法构建,因为它不知道在哪里可以找到根pom。这是有道理的:子项目无法知道父pom将在随机的Artifact Registry repo中找到。这方面的标准做法是什么?
我以前做过的是在每个程序员的计算机中,在他们的settings.xml
中配置<repository>
,但这不能很好地扩展+需要人工干预+在处理CI时非常麻烦,因为现在你需要配置构建机器人的settings.xml。考虑到现在有这么多CI系统,我想现在已经有一个惯例了。有更好的方法来实现这一点吗?回购协议中承诺的某种方式,以及一切开箱即用的方式?git克隆。。。mvn包。。。完成。我特别询问Artifact Registry,因为它不使用静态用户名/密码,而是使用maven wagon来验证
一个潜在的解决方案是不将<repository>
放在根pom中,而是放在每个项目的pom中——但这会导致大量重复,因为配置+旅行车是非常冗长的
假设您的孩子和父母共享一个公共.mvn/文件夹,您可以添加:
.mvn/extensions.xml:
<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">
<!--This has to be declared here in order to allow child modules to be able to fetch older parent POMs.-->
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.1</version>
</extension>
<!--project-settings-extension allows using project-specific .mvn/settings.xml-->
<extension>
<groupId>com.github.gzm55.maven</groupId>
<artifactId>project-settings-extension</artifactId>
<version>0.1.1</version>
</extension>
</extensions>
.mvn/settings.xml(不要忘记使用实际的artifactregistry URL(:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<!--This has to be declared here in order to allow child modules to be able to fetch older parent POMs.-->
<repository>
<id>cloud-artifacts</id>
<url>artifactregistry://...</url> <!--use actual full URL here-->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
</settings>
settings.xml中的存储库通知Maven在搜索工件时考虑该位置。artifactregistry-maven wagon扩展允许maven通过artifactregistration://协议访问工件。
另一个扩展名(com.github.gzm55.maven(使maven查看特定于项目的settings.xml文件(您也可以将--settings=<路径传递到文件>,可能在.mvn/maven.config中,但这将覆盖任何用户设置(。