我常常遇到在groovy中使用traits时随机出现的奇怪编译问题。他们有时会通过清除缓存离开,或者通过添加空注释人为地强迫这些特征的用户重新编译,但这里的错误,我无法动摇,这是我的特点:
trait SOAPClientErrorLogger {
def withLogging(Closure soapCall) {
try {
soapCall()
} catch (SOAPClientException e) {
log.error("Failed to invoke SOAP endpoint: ${e.request.url} \ndata:${new String(e.request.data)} \nResponse:${e.response?.statusCode}:${e.response?.contentAsString}")
throw e
}
}
}
导致以下错误编译(在IDEA和独立运行的gradle中):
Error:Groovyc: Method '$_gc_computeOldVariables' is protected but should be public in trait 'com…SOAPClientErrorLogger'.
为我项目中的每个特征打印同样的错误 他们之前编好了。
任何人都知道我该怎么办?或者解释为什么在一个时髦的项目中使用特征是如此微妙?
谢谢!
更新
当我在功能java库中包含groovy包装器库时,似乎会出现这些错误:
'com.github.mperry:functionalgroovy-主:0.8'