仅将 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* 任务被简单地禁用,这是完全错误的!我需要同时执行两个任务uploadArchivesdistTar 我认为这个问题中给出的其他解决方案是最好的方法:尝试从“档案”配置中删除 .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 存储库不起作用 [重复]

如何使用没有pom文件或settings.xml文件的maven直接将jar文件上传到nexus存储库?

将jar部署到maven内部仓库

sh 将jar安装到本地maven存储库中。

将jstontools jar添加到Maven存储库

多个 jar 的本地 Maven 存储库问题