如何用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
相关产品推荐
相关产品推荐

