Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jenkins管道自定义类-对toString()方法的处理不一致_Java_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

Java Jenkins管道自定义类-对toString()方法的处理不一致

Java Jenkins管道自定义类-对toString()方法的处理不一致,java,jenkins,groovy,jenkins-pipeline,Java,Jenkins,Groovy,Jenkins Pipeline,我有一个Jenkins管道脚本,在其中我创建了一个自定义类来表示AWS AMI。此类扩展java.lang.Object并重写java.lang.Object.toString()。明显的意图是,我可以在创建字符串时直接引用对象,并获得表示该对象的有用字符串 不幸的是,詹金斯管道并不这么认为。它很乐意直接尊重对toString()方法的请求,但如果没有toString,我的println/echo步骤会被悄悄地删除或产生不一致的输出 请参阅下面的代码片段,了解我所说的内容,以及不同的类(例如Ma

我有一个Jenkins管道脚本,在其中我创建了一个自定义类来表示AWS AMI。此类扩展java.lang.Object并重写java.lang.Object.toString()。明显的意图是,我可以在创建字符串时直接引用对象,并获得表示该对象的有用字符串

不幸的是,詹金斯管道并不这么认为。它很乐意直接尊重对toString()方法的请求,但如果没有toString,我的println/echo步骤会被悄悄地删除或产生不一致的输出

请参阅下面的代码片段,了解我所说的内容,以及不同的类(例如Map)如何精确地按预期工作

此外,该代码在Jenkins脚本控制台中工作得非常好。但在jenkins管道作业中,即使沙箱被禁用;事实并非如此

public class Ami implements Serializable {
  private String nodetype
  private String id
  private String created
  private boolean related
  private boolean rebuild

  Ami(
    String nodetype,
    String id       = 'None',
    String created  = 'None',
    boolean related = false,
    boolean rebuild = false
  ) {
    this.nodetype = nodetype
    this.id       = id
    this.created  = created
    this.related  = related
    this.rebuild  = rebuild
  }

  @Override
  public String toString() {
    this.nodetype + '/' + this.id
  }
}

Ami newami = new Ami('foo')
println("Concat toString: " + newami.toString())
println("Concat normal: " + newami)
println("Templated toString: ${newami.toString()}")
println("Templated normal: ${newami}")

Map testmap = [:]
testmap = [foo: "bar", snizz: 'snooch']
println("Concat toString: " + testmap.toString())
println("Concat normal: " + testmap)
println("Templated toString: ${testmap.toString()}")
println("Templated normal: ${testmap}")
脚本控制台输出(按预期):

Jenkins管道(沙箱禁用)输出(完全意外):


到底怎么了?您还可以提供管道脚本吗?@daggett问题是管道作业的输出无法打印“Concat normal:foo/None”,而只是打印“foo/None”,并且“Templated normal:foo/None”行被完全跳过,没有输出。从脚本控制台运行时,这些行正常打印。管道脚本是第一个块。首先定义一个类,然后使用该类实例化一个对象,然后8个println步骤演示在不显式调用toString()的情况下打印对象的问题,这对于Map之类的本机类来说不是问题。遇到同样的问题,没有显式“.toString()”的行被完全忽略。仍在寻找解决方案
Concat toString: foo/None
Concat normal: foo/None
Templated toString: foo/None
Templated normal: foo/None
Concat toString: [foo:bar, snizz:snooch]
Concat normal: [foo:bar, snizz:snooch]
Templated toString: [foo:bar, snizz:snooch]
Templated normal: [foo:bar, snizz:snooch]
[Pipeline] echo
Concat toString: foo/None
[Pipeline] echo
foo/None
[Pipeline] echo
Templated toString: foo/None
[Pipeline] echo
Concat toString: [foo:bar, snizz:snooch]
[Pipeline] echo
Concat normal: [foo:bar, snizz:snooch]
[Pipeline] echo
Templated toString: [foo:bar, snizz:snooch]
[Pipeline] echo
Templated normal: [foo:bar, snizz:snooch]
[Pipeline] End of Pipeline
Finished: SUCCESS