Jenkins Artifactory 插件不生成 POM 文件
Jenkins Artifactory plugin not generating POM file
我正在 Jenkins 中成功构建我的 gradle 项目并将 jars 部署到 artifactory。但是,当我尝试在另一个项目中重用它们时,附加依赖项不是 recognized/downloaded。我认为这与 artifactory 中缺少的 pom 文件有关。
在 artifactory 中,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
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 other SO answer and by the 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 "While the maven plugin does provide the install task, it only adds the task in the presence of the java plugin". Alternatively, to create the .pom
file, you could also consider the maven-publish 插件及其 publishToMavenLocal
任务。
因此,总结一下:要正确创建 .jar
和 .pom
文件,您需要在本地缓存上安装工件(在您的情况下:Jenkins 服务器的本地缓存,一个无害的行为),因为作为这个过程的一部分,所需的文件被创建为构建的输出。然后 Artifactory Jenkins 插件将拾取它们并正确上传它们。
更新
或者,如以下评论(和 another SO question 中所述),您也可以避免 install
步骤,而是将 createPom
任务添加到 gradle 构建中,以便创建 POM 文件如下:
task createPom << {
pom {
project {
groupId 'company'
artifactId project.name
version "$version"
}
}.writeTo("pom.xml")
}
对我有帮助的是添加了以下配置:
Include Patterns: *.pom *.jar
build.gradle:
中还应该启用 maven 插件
apply plugin: 'maven-publish'
之后生成的 pom 和工件被 Jenkins 作业成功上传到 Artifactory。
确保 发布 Maven 描述符 标志设置为 true。
我正在 Jenkins 中成功构建我的 gradle 项目并将 jars 部署到 artifactory。但是,当我尝试在另一个项目中重用它们时,附加依赖项不是 recognized/downloaded。我认为这与 artifactory 中缺少的 pom 文件有关。
在 artifactory 中,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
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 other SO answer and by the 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 "While the maven plugin does provide the install task, it only adds the task in the presence of the java plugin". Alternatively, to create the .pom
file, you could also consider the maven-publish 插件及其 publishToMavenLocal
任务。
因此,总结一下:要正确创建 .jar
和 .pom
文件,您需要在本地缓存上安装工件(在您的情况下:Jenkins 服务器的本地缓存,一个无害的行为),因为作为这个过程的一部分,所需的文件被创建为构建的输出。然后 Artifactory Jenkins 插件将拾取它们并正确上传它们。
更新
或者,如以下评论(和 another SO question 中所述),您也可以避免 install
步骤,而是将 createPom
任务添加到 gradle 构建中,以便创建 POM 文件如下:
task createPom << {
pom {
project {
groupId 'company'
artifactId project.name
version "$version"
}
}.writeTo("pom.xml")
}
对我有帮助的是添加了以下配置:
Include Patterns: *.pom *.jar
build.gradle:
中还应该启用 maven 插件apply plugin: 'maven-publish'
之后生成的 pom 和工件被 Jenkins 作业成功上传到 Artifactory。 确保 发布 Maven 描述符 标志设置为 true。