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

执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:25:42