我正在尝试从jenkins管道中的groovy脚本中的子类调用父类的受保护方法. Jenkins崩溃并说:“groovy.lang.MissingPropertyException:没有这样的属性:_parentValue for class:Child”.
但是,如果我在Intellij IDEA中运行完全相同的代码,它可以正常工作.我不知道为什么这在Jenkins中不起作用.有人可以帮忙吗?
代码:
public class Parent
{
private int _parentValue
public Parent()
{
_parentValue = 0
}
protected void Increment()
{
_parentValue = _parentValue + 1
}
}
public class Child extends Parent
{
public void IncrementFromChild()
{
// call parent method
Increment()
}
}
// Instantiate and call child method
def child = new Child()
child.IncrementFromChild()
堆栈跟踪:
groovy.lang.MissingPropertyException: No such property: _parentValue for class: Child
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:33)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at Parent.Increment(WorkflowScript:12)
at Child.IncrementFromChild(WorkflowScript:20)
at WorkflowScript.run(WorkflowScript:25)
...
最佳答案 似乎CPS转换会破坏共享库中的继承.这确实非常悲伤.
请参阅Andrew Bayer
here.的最新评论
我不确定,但在某些情况下,@ NonCPS-annotation可能会有所帮助.