3

我正在尝试使用标记deploy在 Maven 3.0.4 POM 中配置步骤。<distributionManagement> XSD for POM(第 1389 行),它建议仅提供应该允许 Maven 也从文件中id查找相应的值。settings.xml我在. -X_ 但是,当我只是在我的 POM 中提供并尝试时,我收到一个错误,即 Maven 缺少存储库的 URL,但是当我明确提供作品时。[DEBUG] Repositories (dependencies): [archiva.snapshots (http://snap-mvnrepo.initech.com/archiva/repository/snapshots, releases+snapshots)]settings.xml<id>deploy<url>deploy

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


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

关于来自 POM 的XSD 的<id>子标签(第 1389 行)<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>

错误:

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
4

1 回答 1

4

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

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

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

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

更新

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

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

实际上是

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

资源

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

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

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

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

于 2013-06-10T15:51:49.630 回答