gpt4 book ai didi

Maven 在部署时不引用存储库的 settings.xml

转载 作者:行者123 更新时间:2023-12-04 02:53:59 25 4
gpt4 key购买 nike

我正在尝试配置 deploy使用 <distributionManagement> 进入 Maven 3.0.4 POM标签。来自 XSD for POMs (line 1389) , 它表明仅提供 id应该允许 Maven 也从 settings.xml 中查找相应的值文件。我在 -X 中列出了所需的服务器(配置正确,因为我可以从中提取依赖项并在以 [DEBUG] Repositories (dependencies): [archiva.snapshots (http://snap-mvnrepo.initech.com/archiva/repository/snapshots, releases+snapshots)] Debug模式运行时看到它被提及: settings.xml) .但是,当我只提供 <id> 时在我的 POM 中尝试 deploy ,我收到一条错误消息,指出 Maven 缺少存储库的 URL,但是当我明确提供 <url>deploy有效。

有谁知道我应该怎么做才能让它仅通过 id 工作?我不想对 URL 进行硬编码。


免责声明:拼写错误可能是匿名化的结果,但它们也可能是“真实的”,因此请随时指出任何错误。

关于 <id> <repository> 的子标签来自 XSD for POMs (line 1389) :

A unique identifier for a repository. This is used to match the repository to configuration in the settings.xml file, for example.

来 self 的 settings.xml :

<profile>
<id>archiva_dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>archiva.snapshots</id>
<name>Initech Internal Snapshot Repository</name>
<url>http://snap-mvnrepo.initech.com/archiva/repository/snapshots</url>
</repository>
</repositories>
</profile>

来 self 的(失败)pom.xml :

<distributionManagement>
<repository>
<id>archiva.snapshots</id>
<!--
<name>Initech Internal Snapshot Repository</name>
<url>http://snap-mvnrepo.initech.com/archiva/repository/snapshots</url>
-->
</repository>
</distributionManagement>

错误:

Caused by: java.lang.IllegalStateException: Failed to create release distribution repository for com.initech.ws:initechws:pom:1.0-SNAPSHOT
at org.apache.maven.project.MavenProject.getReleaseArtifactRepository(MavenProject.java:1853)
at org.apache.maven.project.MavenProject.getDistributionManagementArtifactRepository(MavenProject.java:1377)
at org.apache.maven.plugin.deploy.DeployMojo.getDeploymentRepository(DeployMojo.java:227)
at org.apache.maven.plugin.deploy.DeployMojo.execute(DeployMojo.java:118)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
... 20 more
Caused by: org.apache.maven.artifact.InvalidRepositoryException: URL missing for repository archiva.snapshots
at org.apache.maven.repository.legacy.LegacyRepositorySystem.buildArtifactRepository(LegacyRepositorySystem.java:775)
at org.apache.maven.project.MavenProject.getReleaseArtifactRepository(MavenProject.java:1843)
... 24 more

最佳答案

/project/distributionManagement/id 值定义要匹配的 /settings/servers/server/id 以识别连接到由 /project/distributionManagement/url

指定的 url

由于用于部署的 URL 通常与用于读取访问的 URL 不同,并且相同的凭据可能适用于多个 URL,因此无需查找 /project/repositories/repository/project/pluginRepositories/pluginRepository

因此,简短的回答是您必须指定 /project/distributionManagement/url 才能部署,如果您需要凭据才能部署到该 URL,则需要指定 /project/distributionManagement/id 并确保匹配的凭据存在于您的 settings.xml

我们如何更新文档以使上述内容更加清晰,并防止 future 的用户像您一样感到困惑?

更新

modello 工具链只生成了一些句子的 XSL,所以

A unique identifier for a repository. This is used to match the repository to configuration in the settings.xml file, for example.

其实是

A unique identifier for a repository. This is used to match the repository to configuration in the settings.xml file, for example. Furthermore, the identifier is used during POM inheritance and profile injection to detect repositories that should be merged.

Source

最后,为了完全理解这句话,您需要知道 settings.xml 文件只是从命令行调用 Maven 时的设置源。 Maven Embedder 实际上可能意味着提供给 Maven 的设置完全来自其他来源(例如,来自 Eclipse 或其他 IDE 的配置数据库),这就是 MRELEASE-577 中一些有趣的原因。 .

阅读第一句话的更好方法可能是

A unique identifier for a repository. This is used to match the repository to configuration, for example in the settings.xml file.

但如果你能提出更好的建议,我会相应地更新文档

关于Maven 在部署时不引用存储库的 settings.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com