maven - Jenkins Artifactory插件未生成POM文件

标签 maven jenkins gradle pom.xml artifactory

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

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

我是否正确理解我需要此POM文件作为gradle以便在尝试再次下载jar时解决其依赖关系?为什么不生成POM文件?

作业设置为:

Gradle-人工工厂整合

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]

build :
use gradle wrapper = true
tasks = build

最佳答案

Maven存储库确实提供了 Artifact (通常是jar文件)和pom文件(了.pom扩展名),列出了所需的依赖关系及其范围(以便可以通过传递方式解析为每个 Artifact 重新创建整个所需的依赖关系图)。因此,确实需要jar和.pom文件。

我有一个完全相同的问题,但对于Maven构建。在我的情况下,Jenkins构建正在执行mvn clean package命令,该命令有效地创建了所需的jar文件。然后,Artifactory Jenkins插件正确地将 jar 推到Artifactory,并与所需的Maven坐标(GAV,groupId,artifactId,版本)完美结合。但是,.pom文件丢失。
在我的情况下,解决方案是将调用的Maven阶段从package更改为install。实际上,install阶段还会创建所需的.pom文件,并在本地存储库(Maven缓存)上另外安装 Artifact 。

因此,只需切换到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. Installing to the local repository
The Maven plugin adds an install task to your project. This task depends on all the archives task of the archives configuration. It installs those archives to your local Maven repository.

31.6.4. Maven POM generation
When deploying an artifact to a Maven repository, Gradle automatically generates a POM for it.



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

因此,总结一下:为了正确创建.jar.pom文件,您需要在本地缓存上安装 Artifactory (在您的情况下:Jenkins服务器的本地缓存,这是无害的操作),因为在此过程中,所需文件被创建为构建的输出。然后,Artifactory Jenkins插件将对其进行拾取并正确上传。

更新
另外,如下面的注释所述(和another SO question中的描述),您也可以避免install步骤,而将createPom任务添加到gradle构建中,以创建POM文件,如下所示:
task createPom << { 
    pom { 
        project { 
            groupId 'company'
            artifactId project.name
            version "$version"
        }
    }.writeTo("pom.xml")
}

关于maven - Jenkins Artifactory插件未生成POM文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615341/

相关文章:

java - 在插件运行之前运行插件执行

maven - 如何在 Jenkins 中运行没有 POM 的 Maven 插件?

jenkins - 如何将 CSS Jelly 文件添加到 Jenkins 插件?

Jenkins 安装 Windows 10 "Service Logon Credentials"

java.lang.ClassNotFoundException : Cannot find implementation for 异常

requirejs - 在war中打包requirejs优化文件

linux - 设置脚本在 Linux 启动时自动启动

java - JFOREX SDK - 如何向 www 服务器 ssl 连接发送 HTTPS GET 请求

java - 使用 Jenkins 通过 SSH 发送文件或执行命令时脚本不退出

android - 在 Android buildTypes-->debug 中设置 `isDebuggable true` 会导致 gradle 同步错误