我正在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
答案 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
更改为install
。 install
阶段确实创建了所需的.pom
文件,并在本地存储库(Maven缓存)上安装了人工制品。
因此,只需切换到mvn clean install
,Artifactory Jenkins插件就可以正确上传.jar
和.pom
文件。
在您的情况下,对于gradle构建,问题可能是相同的。您可能正在创建预期的jar文件,Artifactory Jenkins插件正确地将其拾取并将其推送到Artifactory,但是没有生成.pom
文件,因此没有上传。
因此,如果您正在调用gradle assemble
或gradle 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。