Jenkins Artifactory插件不生成POM文件

时间:2016-01-05 15:29:49

标签: maven jenkins gradle pom.xml artifactory

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

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

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

作业设置为:

Gradle-Artifactory Integration

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

2 个答案:

答案 0 :(得分:12)

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

我有完全相同的问题但是对于maven构建。在我的例子中,Jenkins构建正在执行mvn clean package命令,它有效地创建了所需的jar文件。然后Artifactory Jenkins插件正确地将jar推送到Artifactory,完全可用所需的Maven坐标(GAV,groupId,artifactId,version)。但是,.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文件,您需要在本地缓存上安装artefact(在您的情况下:Jenkins服务器的本地缓存,一个无害的操作),因为作为此过程的一部分,所需的文件被创建为构建的输出。 Artifactory Jenkins插件然后将它们拾起并正确上传它们。

<强>更新
或者,如下面的评论(以及another SO question)中所述,您还可以避免install步骤,而是在您的gradle构建中添加createPom任务,以便创建POM文件如下:

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

答案 1 :(得分:0)

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

Include Patterns: *.pom *.jar

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

apply plugin: 'maven-publish'

之后,Jenkins的工作成功将上传的pom和工件上传到Artifactory。 确保发布Maven描述符标志设置为true。