You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Gradle MavenPublication部署无后缀二进制至Maven仓库及设置POM打包?

用Gradle MavenPublication部署无扩展名二进制制品的解决方案

我之前刚好处理过类似的需求,帮你拆解这两个问题:

1. 如何部署无扩展名的二进制文件

你遇到的那个末尾带点的问题,是Gradle默认构件命名规则导致的——当你把extension设为空字符串时,它还是会保留扩展名的分隔点。要彻底去掉扩展名,最直接的办法是直接指定构件的最终文件名,绕过默认的命名逻辑:

publishing {
    publications {
        maven(MavenPublication) {
            // 这里直接用项目的artifactId和version生成文件名,灵活适配版本变化
            artifact(file("some/parent/dir/foo")) {
                fileName = "${project.artifactId}-${project.version}"
            }
            
            // 如果需要区分Linux和Mac版本,加个classifier就好:
            // Linux版本
            artifact(file("some/parent/dir/foo-linux")) {
                fileName = "${project.artifactId}-${project.version}-linux"
            }
            // Mac版本
            artifact(file("some/parent/dir/foo-mac")) {
                fileName = "${project.artifactId}-${project.version}-mac"
            }
        }
    }
}

这样配置后,部署到仓库的文件就是foo-1.0.0(或者带系统标识的foo-1.0.0-linux),完全没有多余的点。

2. POM打包类型的选择

Maven确实没有专门为无扩展名二进制文件定义官方打包类型,不过有几个靠谱的选项:

  • 推荐用binary作为打包类型:这个类型直观易懂,能明确告诉使用者这是个二进制制品,而且不会触发Maven那些和Java构建相关的生命周期阶段(比如编译、测试),非常适合你的场景。配置方式很简单:

    publishing {
        publications {
            maven(MavenPublication) {
                packaging = "binary"
                // 加上前面的artifact配置...
            }
        }
    }
    
  • 如果你不想自定义打包类型,也可以用pom,但这种方式容易让其他开发者误解(因为pom打包通常对应聚合/父项目),所以不推荐。

  • 千万别用默认的jar打包类型,这会让别人误以为这是个Java jar包,完全不符合你的二进制制品的定位。

内容的提问来源于stack exchange,提问作者twwwt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:59:37