【问题标题】:Jenkins Artifactory plugin not generating POM fileJenkins Artifactory 插件不生成 POM 文件
【发布时间】:2016-04-09 11:50:47
【问题描述】:

我正在 Jenkins 中成功构建我的 gradle 项目并将 jars 部署到 artifactory。但是,当我尝试在另一个项目中重用它们时,无法识别/下载其他依赖项。我认为这与工件中缺少的 pom 文件有关。

在工件中,JAR 文件已正确上传,但旁边没有 POM 文件。

我是否正确理解我需要这个 POM 文件用于 gradle 以在尝试再次下载时解决 jar 的依赖关系?以及为什么没有生成POM文件?

作业设置为:

Gradle-Artifactory 集成

Project uses the Artifactory Gradle Plugin = false
Capture and publish build info = true
Publish artifacts to Artifactory = true
    Publish Maven descriptors = true
Use Maven compatible patterns = true
    patterns are default: [organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]

构建:

use gradle wrapper = true
tasks = build

【问题讨论】:

  • jar是如何上传到Artifactory的?通过 mvn deploy 还是通过 Artifactory Jenkins 插件?
  • 通过 Artifactory Jenkins 插件上传

标签: maven jenkins gradle pom.xml artifactory


【解决方案1】:

帮助我的是添加以下配置:

Include Patterns: *.pom *.jar

build.gradle 中也应该启用 maven 插件:

apply plugin: 'maven-publish'

之后生成的 pom 和工件由 Jenkins 作业成功上传到 Artifactory。 确保 Publish Maven 描述符 标志设置为 true。

【讨论】:

    【解决方案2】:

    Maven 存储库确实提供了工件(通常是 jar 文件)和 pom 文件(.pom 扩展名),列出了所需的依赖项及其范围(以便它们可以传递解析以重新创建每个工件所需的整个依赖图)。所以你确实需要 jar 和 .pom 文件。

    我有完全相同的问题,但对于一个 Maven 构建。在我的例子中,Jenkins 构建正在执行 mvn clean package 命令,它有效地创建了所需的 jar 文件。然后 Artifactory Jenkins 插件正确地将 jar 推送到 Artifactory,完全可用所需的 Maven 坐标(GAV、groupId、artifactId、版本)。但是,.pom 文件丢失了。
    就我而言,解决方案是将调用的 Maven 阶段从 package 更改为 installinstall 阶段确实还创建了所需的 .pom 文件,并另外在本地存储库(Maven 缓存)上安装了人工制品。

    所以,只要切换到mvn clean install,Artifactory Jenkins 插件就能正确上传.jar.pom 文件。

    在您的情况下,对于 gradle 构建,问题可能是相同的。您可能正在创建预期的 jar 文件,并且 Artifactory Jenkins 插件正确地拾取它并将其推送到 Artifactory,但没有生成 .pom 文件,因此没有上传。 因此,如果您正在调用 gradle assemblegradle build,则您正确生成了 jar,但不是 .pom 文件。您可能还应该使用 maven 插件在 Jenkins 上执行 gradle install 命令,如 this 其他 SO 答案和 plugin documentation 中所述,我们也可以从中阅读:

    31.6.3。安装到本地存储库
    Maven 插件将安装任务添加到您的项目中。此任务取决于归档配置的所有归档任务。它将这些存档安装到您的本地 Maven 存储库。

    31.6.4。 Maven POM 生成
    将工件部署到 Maven 存储库时,Gradle 会自动为其生成 POM。

    注意that虽然 maven 插件确实提供了安装任务,但它只在存在 java 插件的情况下添加任务”。或者,要创建.pom 文件,您还可以考虑使用maven-publish 插件及其publishToMavenLocal 任务。

    所以,总结一下:要正确创建 .jar.pom 文件,您需要在本地缓存上安装人工制品(在您的情况下:Jenkins 服务器的本地缓存,一个无害的操作),因为作为在此过程的一部分中,所需的文件被创建为构建的输出。然后 Artifactory Jenkins 插件将拾取它们并正确上传它们。

    更新
    或者,如下面的 cmets 所述(以及在 another SO question 中),您也可以避免 install 步骤,而是将 createPom 任务添加到您的 gradle 构建中,以便按如下方式创建 POM 文件:

    task createPom << { 
        pom { 
            project { 
                groupId 'company'
                artifactId project.name
                version "$version"
            }
        }.writeTo("pom.xml")
    }
    

    【讨论】:

    • 够近了!我没有安装,而是自己添加了一个 createPom 任务,现在我将其添加到构建中运行。这将创建 POM 文件,现在我可以在我的其他项目任务 createPom
    • 太好了,干得好。我会相应地更新答案,以使其更具可见性。
    • 也许值得一提的是,左移运算符 (&lt;&lt;) 目前已弃用,即将从 5.0 版中完全删除。 :)
    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2012-02-13
    相关资源
    最近更新 更多