Bintray Gradle插件未读取build.gradle配置的制品版本问题
看起来你遇到的问题是Bintray插件没有使用你在build.gradle中配置的0.1版本,反而生成了类似闭包对象toString的随机字符串,这大概率是版本配置冲突或者插件读取版本信息的逻辑出现了问题。下面是具体的分析和修复方案:
核心问题原因
你在配置中同时做了两件事:
- 在
bintray块里手动设置了version.name = project.version - 在
publishing的MavenCustompublication中也明确指定了version project.version
当你通过publications = ['MavenCustom']让Bintray插件关联Maven发布配置时,插件会自动从publication中提取groupId、artifactId和version等信息,手动设置bintray.version反而会干扰这个逻辑,甚至在某些老版本插件中导致版本值被错误解析成内部闭包对象的字符串。
修复步骤
1. 移除bintray块中的手动版本配置
删除bintray.pkg下的version闭包,让插件直接从MavenCustom publication中读取版本信息:
bintray { user = System.getenv('BINTRAY_USER') key = System.getenv('BINTRAY_KEY') override = true publications = ['MavenCustom'] pkg { repo = 'my-repository' name = 'my-package' userOrg = 'my-organisation' licenses = ['AGPL-V3'] websiteUrl = 'https://github.com/myproject' issueTrackerUrl = 'https://github.com/myproject/issues' vcsUrl = 'https://github.com/myproject.git' // 移除下面的手动版本配置 // version { // name = project.version // released = new Date() // } } }
2. 确保MavenCustom publication的版本配置正确
确认你的publishing块中,MavenCustom的版本、groupId和artifactId都正确绑定到根项目的配置:
publishing { publications { MavenCustom(MavenPublication) { from components.java artifact sourcesJar { classifier "sources" } artifact javadocJar { classifier "javadoc" } // 明确绑定根项目的配置,避免上下文混淆 groupId rootProject.group artifactId rootProject.name version rootProject.version pom.withXml { def root = asNode() root.appendNode('description', 'descr') root.appendNode('name', 'Project Name') root.appendNode('url', 'https://github.com/myproject') root.children().last() + pomConfig } } } }
这里使用rootProject前缀确保引用的是根项目的配置,避免子项目上下文导致的变量混淆。
3. 验证自定义Jar任务的配置
你的根项目Jar任务是自定义的fat jar,由于你直接修改了默认的jar任务(而非创建新任务),components.java会自动关联这个fat jar,所以这部分不需要调整。如果后续发现发布的不是fat jar,可以将from components.java替换为artifact jar来明确指定使用自定义Jar任务的产物。
额外建议
考虑到Gradle Bintray插件已经停止维护,官方推荐使用JFrog Gradle插件,它对新版本Gradle的支持更好,如果后续遇到更多兼容性问题,可以考虑迁移到JFrog官方提供的插件。
内容的提问来源于stack exchange,提问作者user7621344

