如何让 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 工作
如何在 Artifactory 中重建 maven-metadata.xml?