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

时间:2013-06-10 15:44:49

标签: maven maven-deploy-plugin

我正在尝试使用<distributionManagement> 标记配置Maven 3.0.4 POM中的deploy步骤。从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)]调试模式settings.xml中运行时,可以从中获取依赖关系并查看它。但是,当我只在我的POM中提供<id>并尝试deploy时,我收到一个错误,即Maven缺少存储库的URL,但是当我明确提供<url>deploy有效。

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


免责声明:错别字可能是匿名化的结果,但它们可能是“真实的”,所以请随意指出。

关于XSD for POMs (line 1389)<id>的{​​{1}}子标记:

  

存储库的唯一标识符。例如,这用于将存储库与<repository>文件中的配置进行匹配。

来自我的settings.xml

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>

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>

1 个答案:

答案 0 :(得分:3)

/project/distributionManagement/id值定义要匹配的/settings/servers/server/id,以便识别连接到/project/distributionManagement/url指定的网址时要使用的凭据

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

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

中存在匹配的凭据

我们如何更新文档以使上述内容更清晰,并防止未来用户以您的方式感到困惑?

更新

模型工具链只用一些句子生成XSL,所以

  

存储库的唯一标识符。例如,这用于将存储库与settings.xml文件中的配置进行匹配。

实际上是

  

存储库的唯一标识符。这用于匹配存储库   例如,在settings.xml文件中进行配置。   此外,在POM继承和配置文件期间使用标识符   注入以检测应合并的存储库。

     

Source

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

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

  

存储库的唯一标识符。这用于将存储库与配置匹配,例如在settings.xml文件中。

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