Maven Jenkins Artifactory插件未生成POM文件

Maven Jenkins Artifactory插件未生成POM文件,maven,jenkins,gradle,pom.xml,artifactory,Maven,Jenkins,Gradle,Pom.xml,Artifactory,我正在Jenkins成功地构建我的gradle项目,并将JAR部署到artifactory。但是,当我尝试在另一个项目中重用它们时,其他依赖项不会被识别/下载。我认为这与artifactory中丢失的pom文件有关 在artifactory中,JAR文件已正确上载,但旁边没有POM文件 当我再次尝试下载时,gradle需要这个POM文件来解决jar的依赖关系,我的理解正确吗?为什么没有生成POM文件 作业设置为: 梯度人工集成 Project uses the Artifactory Gradl

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

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

当我再次尝试下载时,gradle需要这个POM文件来解决jar的依赖关系,我的理解正确吗?为什么没有生成POM文件

作业设置为:

梯度人工集成

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

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

我有完全相同的问题,但对于maven构建。在我的例子中,Jenkins构建正在执行
mvncleanpackage
命令,该命令有效地创建了所需的jar文件。然后ArtifactoryJenkins插件正确地将jar推送到Artifactory,完全可以使用所需的Maven坐标(GAV、groupId、artifactId、version)。但是,缺少.pom文件。
在我的例子中,解决方案是将调用的Maven阶段从
package
更改为
install
install
阶段确实也创建了所需的
.pom
文件,并在本地存储库(Maven缓存)上额外安装了工件

因此,只要切换到
mvn clean install
,artifactoryjenkins插件就可以正确地上传
.jar
.pom
文件

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

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

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

不过要注意“虽然maven插件确实提供安装任务,但它只在java插件存在的情况下添加任务”。或者,要创建<代码> .POM文件,还可以考虑插件和它的代码> PusithTimeAdvaseTask.

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

更新
或者,如下面(和中)的注释所述,您也可以避免
安装
步骤,而是将
createPom
任务添加到gradle构建中,以创建POM文件,如下所示:

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

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

Include Patterns: *.pom *.jar
build.gradle中还应启用maven插件:

apply plugin: 'maven-publish'
之后,生成的pom和工件被Jenkins作业成功上传到Artifactory。
确保Publish Maven descriptors标志设置为true。

jar是如何上载到Artifactory的?通过mvn部署还是通过Artifactory Jenkins插件?它是通过Artifactory Jenkins插件上传的!我没有安装,而是自己添加了一个createPom任务,现在我将其添加到构建过程中运行。这将创建POM文件,现在我可以在我的另一个项目任务createPom中正确编译工件了,做得很好。我将相应地更新答案,以使其更具可视性。也许值得一提的是,左移位运算符(