如何让 Teamcity Artifactory 插件在 Gradle 中调用 bootJar 而不是 Jar?

Posted

技术标签:

【中文标题】如何让 Teamcity Artifactory 插件在 Gradle 中调用 bootJar 而不是 Jar?【英文标题】:How can I have Teamcity Artifactory plugin invoke bootJar instead of Jar in Gradle? 【发布时间】:2018-09-14 15:13:32 【问题描述】:

我们使用 Gradle 4.8.1 来生成 Spring Boot 可执行 jar。这在本地运行良好。但是,我们正在使用 Teamcity 将我们的工件发布到 Artifactory。

据我了解,问题是“artifactoryPublish”任务调用 Gradle 中的“jar”任务,该任务从“存档”上传工件。因此,无论 teamcity 调用“assemble”任务、“bootjar”任务还是“build”任务,artifactory 插件最终都会获取“jar”任务的输出并发布它,而我们'希望在 artifactory 中有“bootjar”任务(fat jar)的输出。

有什么办法可以强制 artifactoryPublish 运行 bootjar 而不是 jar ?或者对于 jar 任务也创建一个 fat jar ?还是我应该考虑另一种方法?

这是我来自其中一个子项目的 build.gradle

plugins 
    id "org.springframework.boot" version "2.0.4.RELEASE"
    id "io.spring.dependency-management" version "1.0.6.RELEASE"


apply plugin: 'java'

repositories 
    mavenCentral()


description = 'atlas-data-service'

// Dynamically insert TeamCity build number if available
if (hasProperty("teamcity")) 
    version = teamcity["build.number"]
    println "Release version with TeamCity build number passed into gradle is " + version
 else 
    // Take the default appVersion defined in top level build.gradle when building outside of TeamCity
    version = "$appVersion"


jar 
    baseName = 'data-service'
    enabled = true


bootJar 
    mainClassName = 'c.m.f.a.dataservice.AtlasDataServiceApplication'
    baseName = 'data-service'
    enabled = true
    classifier = 'boot'


dependencies 
...

【问题讨论】:

【参考方案1】:

这个问题来自去年,但更新以防其他人遇到同样的问题。

我使用 Maven-publish 插件来完成这项工作。

https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#publishing-your-application-maven-publish

apply plugin: 'maven-publish'

publishing.publications 
    bootJava(MavenPublication) 
        artifact bootJar
    

【讨论】:

以上是关于如何让 Teamcity Artifactory 插件在 Gradle 中调用 bootJar 而不是 Jar?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 SpecUnit 在 TeamCity CI 构建中运行

无法让 TeamCity FxCop Build Runner 工作

如何清除TeamCity 7+中待处理的VCS更改?

如何在 Artifactory 中重建 maven-metadata.xml?

teamcity api如何通过casename找到build

如何在将通用工件上传到jenkins管道中的JFrog Artifactory时重命名现有文件夹