为 Jenkins Workflow/Pipeline 创建可序列化 Groovy Class 的语法是什么
What's the syntax to create a Serializable Groovy Class for Jenkins Workflow/Pipeline
使用 Jenkins Workflow Groovy,我 运行 在尝试为一个非常简单的 class 创建对象时遇到序列化错误。通过可序列化测试需要什么样的语法糖?以下代码失败。添加 @Serializable 行失败 "class java.io.Serializable is not an annotation in @java.io.Serializable"
//@Serializable
class TestClass {
def hello() {
println "halloooo"
}
}
def myobj = TestClass.newInstance()
node () {
myobj.hello()
}
感谢 izzekil 回答了这个问题。
class TestClass implements Serializable {}
值得一提的是 Groovy classes 不需要显式实现 Serializable
接口 - 任何 Groovy class 都实现以下两个接口: Serializable
和 GroovyObject
.
但是,was an issue 就像 Groovy CPS 和 Jenkins Workflow CPS 库中问题中提到的那样。它在 groovy-cps:1.20 和 workflow-cps:2.41.
中得到修复
另一方面,不推荐使用 Class.newInstance()
在 Jenkins 管道中初始化对象。此方法默认列入黑名单,当您尝试批准它时,Jenkins 警告您批准此签名可能会引入安全漏洞。
如果您查看 Class.newInstance()
方法实现,您会发现它疯狂地使用了反射。在这种情况下,最好使用 new TestClass()
而不是 TestClass.newInstance()
来实例化对象。
使用 Jenkins Workflow Groovy,我 运行 在尝试为一个非常简单的 class 创建对象时遇到序列化错误。通过可序列化测试需要什么样的语法糖?以下代码失败。添加 @Serializable 行失败 "class java.io.Serializable is not an annotation in @java.io.Serializable"
//@Serializable
class TestClass {
def hello() {
println "halloooo"
}
}
def myobj = TestClass.newInstance()
node () {
myobj.hello()
}
感谢 izzekil 回答了这个问题。
class TestClass implements Serializable {}
值得一提的是 Groovy classes 不需要显式实现 Serializable
接口 - 任何 Groovy class 都实现以下两个接口: Serializable
和 GroovyObject
.
但是,was an issue 就像 Groovy CPS 和 Jenkins Workflow CPS 库中问题中提到的那样。它在 groovy-cps:1.20 和 workflow-cps:2.41.
中得到修复另一方面,不推荐使用 Class.newInstance()
在 Jenkins 管道中初始化对象。此方法默认列入黑名单,当您尝试批准它时,Jenkins 警告您批准此签名可能会引入安全漏洞。
如果您查看 Class.newInstance()
方法实现,您会发现它疯狂地使用了反射。在这种情况下,最好使用 new TestClass()
而不是 TestClass.newInstance()
来实例化对象。