执行SvnUpdate任务时gradle-svntools-plugin出现类型转换异常问题
解决gradle-svntools-plugin中SvnUpdate任务的String转Long类型转换错误
这个问题我之前也碰到过,核心原因很直白:当你通过项目属性传入rev参数时,Gradle默认会把命令行传入的参数解析成String类型(哪怕你输入的是纯数字),但SvnUpdate任务的revision属性要求的是Long类型,直接赋值就会触发类型转换异常。
快速修复方案
只需要把传入的rev字符串显式转换为Long类型即可,修改你的任务代码如下:
task updateSource(type: SvnUpdate){ username = svn_username password = svn_password if ( project.hasProperty("rev") ) { // 显式将String类型的rev转换为Long类型 revision = rev.toLong() println "Revision --- $rev" } doLast{ println "Revision ..." } }
为什么会出现这个问题?
当你用类似gradle -Prev=12345的命令传入参数时,Gradle会把所有命令行属性都当作String处理——这是Gradle的默认行为,不管参数看起来是不是数字。而gradle-svntools-plugin的SvnUpdate任务中,revision字段是强类型的Long,所以必须手动做类型转换,不能直接赋值。
额外优化(可选)
如果担心用户传入的rev不是合法的数字(比如输入了字母或特殊字符),可以加个异常处理,避免任务直接崩溃,还能给出友好提示:
task updateSource(type: SvnUpdate){ username = svn_username password = svn_password if ( project.hasProperty("rev") ) { try { revision = rev.toLong() println "Revision --- $rev" } catch (NumberFormatException e) { println "⚠️ Invalid revision number: $rev, will pull latest revision instead" // 转换失败时不设置revision,默认拉取最新版本 } } doLast{ println "Revision ..." } }
内容的提问来源于stack exchange,提问作者Ed Dunn
相关产品推荐
相关产品推荐

