仅将 JAR 发布到 maven 存储库
Posted
技术标签:
【中文标题】仅将 JAR 发布到 maven 存储库【英文标题】:Publish only JAR to maven repo 【发布时间】:2019-05-09 11:17:31 【问题描述】:我想将生成的 jar 文件上传到 packagecloud.io。
我的缩写build.gradle
:
jar
archiveName "$project.name-$project.version-SNAPSHOT.jar"
distTar
archiveName 'dist.tar'
//project.configurations.archives.artifacts.clear()
artifacts
archives( file( "$buildDir/libs/$project.name-$project.version-SNAPSHOT.jar" ) )
uploadArchives
repositories.mavenDeployer
pom.version = project.version + '-SNAPSHOT'
configuration = configurations.deployerJars
repository( url:'packagecloud+https://packagecloud.io/mycompany/central' )
authentication password:pw
jar.finalizedBy uploadArchives
当我运行gradlew distTar
时,jar文件与tar一起生成,并上传到repo,但构建失败并出现异常:
> Task :compileJava NO-SOURCE
> Task :compileGroovy UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :jar
> Task :startScripts
> Task :distTar
> Task :uploadArchives
Could not transfer artifact io.mozaiq:feature-state-verticle:pom:0.1-20190509.110559-1 from/to remote (packagecloud+https://packagecloud.io/mozaiq/central): Upload failed: "error":"Validation failed: Unknown Java::Version::UnsupportedPackaging"
Could not transfer artifact io.mozaiq:feature-state-verticle:tar:0.1-20190509.110559-1 from/to remote (packagecloud+https://packagecloud.io/mozaiq/central): Upload failed: "error":"Could not understand this request, please contact support@packagecloud.io"
> Task :uploadArchives FAILED
因此,出于某种原因,它不仅尝试上传 jar 文件,还尝试上传所有生成的人工制品。
如何限制发布到 jar 文件?
【问题讨论】:
Upload only war/jar files in gradle(restrict zip/tar generation and upload)的可能重复 @M.Ricciuti 在“解决方案”中 dist* 任务被简单地禁用,这是完全错误的!我需要同时执行两个任务uploadArchives
和distTar
我认为这个问题中给出的其他解决方案是最好的方法:尝试从“档案”配置中删除 .zip/.tar。 Gradle 论坛上也有这个相关问题:discuss.gradle.org/t/…
在不同的组合中也试过了,见 upd
@M.Ricciuti 在玩了你的链接(没有用)之后,我设法让它启动并运行,没有任何问题。我最终添加了configurations.archives.artifacts.removeAll 'jar' != it.type
。请随意回答问题,以便我接受
【参考方案1】:
基于来自 Gradle 论坛的 similar question 和 this post 的回答:解决方案是从 archives
配置中排除所有不是“jar”的工件。这样,uploadArchives
只会上传 Jar 工件,跳过所有其他生成的工件/
configurations.archives.artifacts.removeAll
it.extension != 'jar'
这类似于您自己的基于工件“类型”的解决方案。
【讨论】:
以上是关于仅将 JAR 发布到 maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章
将外部 jar 添加到 Maven 存储库不起作用 [重复]