我可以在 pom 或 settings.xml 中包含 mvn deploy:deploy-file 而不是 cli 目标吗

Can I include the mvn deploy:deploy-file in the pom or settings.xml instead of cli goal

我需要将自定义 jar 与从我的 Java 项目生成的 jar 一起部署到 Artifactory。目前我能找到的唯一方法是通过命令行目标使用:

mvn deploy:deploy-file -DgroupId=<group-id> \
  -DartifactId=<artifact-id> \
  -Dversion=<version> \
  -Dpackaging=<type-of-packaging> \
  -Dfile=<path-to-file> \
  -Durl=<url-of-the-repository-to-deploy>

有没有办法将其包含在 pom 文件中?作为插件还是什么?

您可以上传custom maven settings.xml to TeamCity, where you must specify distributionManagement and server as stated on this documentation page。在此之后,如果您将 Maven 构建步骤更改为使用上传的设置,只需将 deploy gial 添加到此步骤中的已执行目标集即可完成部署。

Working with Maven section in the Artifactory manual covers this topic in detail, specifically the part about deploying artifacts.
此外,您还可以观看有关 setting Artifactory as a Maven repository.

的截屏视频

要通过 Artifactory 部署构建工件,您必须在 settings.xml 文件中添加 distributionManagement element to your project pom file with the URL of a target local repository to which you want to deploy your artifacts. In addition you will need to configure Artifactory 服务器凭据。
Artifactory 可以帮助生成 distributionManagement 片段和 settings.xml(请参阅我上面提供的链接中的更多信息)。

当然可以。只需定义绑定到 deploy 阶段的 maven-deploy-plugin:deploy-file 目标的执行,并使用您的值进行配置。部署项目时,将调用此执行并部署 JAR。

<plugin>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.8.2</version>
    <executions>
        <execution>
            <id>deploy-file</id>
            <phase>deploy</phase>
            <goals>
                <goal>deploy-file</goal>
            </goals>
            <configuration>
                <file><!-- path-to-file --></file>
                <url><!-- url-of-the-repository-to-deploy --></url>
                <groupId><!-- group-id --></groupId>
                <artifactId><!-- artifact-id --></artifactId>
                <version><!-- version --></version>
                <packaging><!-- type-of-packaging --></packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

请注意,您可能还需要添加一个 repositoryId。这是要映射到 settings.xml.

<server> 部分下的 <id> 的服务器 ID

我个人认为在 POM 中声明它不是一个好的方法。 例如,如果您有一个多模块 Maven 项目,其中包含继承自父 POM/super POM 的子 POM,并且要上传的自定义 jar 仅包含在其中一个子模块中,那么您将必须显式声明配置在父 POM 中(因为 mvn deploy 通常用于执行 superpom)并声明所有其他子 POM 以跳过配置的执行,这会使 POM 结构混乱。

一个更好的方法是写一个脚本,link它到你的 deploy 目标的 运行 配置,因为 deploy:deploy-file 目标在构建生命周期。