代码之家  ›  专栏  ›  技术社区  ›  Jeremy Woodland

为Jenkins工作流/管道创建可序列化Groovy类的语法是什么

  •  4
  • Jeremy Woodland  · 技术社区  · 9 年前

    在使用Jenkins Workflow Groovy时,我在尝试为一个死的简单类创建对象时遇到了序列化错误。通过可序列化测试需要什么样的语法糖?以下代码失败。添加@Serializable行失败,出现“class java.io.Serializable is not an annotation in@java.io.Serializale”

    //@Serializable 
    class TestClass { 
        def hello() { 
            println "halloooo" 
        } 
    } 
    def myobj = TestClass.newInstance() 
    node () { 
        myobj.hello() 
    }
    
    2 回复  |  直到 9 年前
        1
  •  10
  •   Dónal    8 年前

    感谢伊泽基尔的回答。

    class TestClass implements Serializable {}
    
        2
  •  4
  •   Szymon Stepniak    6 年前

    值得一提的是,Groovy类不需要实现 Serializable 接口显式-任何Groovy类都实现以下两个接口: 可序列化 GroovyObject .

    然而,在那里 was an issue 就像Groovy CPS和Jenkins Workflow CPS库中问题中提到的那样。它被固定了 groovy cps:1.20 工作流cps:2.41 .

    另一方面,使用 Class.newInstance() 不是Jenkins管道中初始化对象的推荐方法。默认情况下,此方法被列入黑名单,当您尝试批准它时,Jenkins警告您,批准此签名可能会引入安全漏洞。

    enter image description here

    如果你看看 类.newInstance() 方法实现你会看到它疯狂地使用反射。最好用实例化对象 new TestClass() 而不是 TestClass.newInstance() 在这种情况下。