我们将CruiseControl 2.8.4与TFS一起使用。每隔一段时间,当我们将一个新项目(即TFS分支)添加到config.xml并重新启动CruiseControl时,我们就会收到一个StackOverflowError,看起来如下:
2015-04-08 16:52:14,755 [Thread-57] ERROR ThreadQueue - uncaught exception in Thread-57
java.lang.StackOverflowError
at java.util.regex.Pattern$Single.isSatisfiedBy(Pattern.java:3742)
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
我下载了CruiseControl源代码,发现使用Pattern类的地方相对较少。与我们相关的是一个名为TeamFoundationServer的类(Git和Mercurial也有类似的类)。当类试图通过如下调用命令行客户端来获取自上次构建以来的修改时,似乎会出现错误:
tf.exe history "itemspec" /noprompt /server:http://mytfsserver:8080/tfs/ /recursive /format:detailed /version:D2015-04-08T16:45:00Z~D2015-04-08T23:59:59Z
我猜测,由于这是CruiseControl中项目的第一个构建,这与它有关,但我不确定为什么。我想我已经度过了这个问题的大部分时间,但在这一点上停滞不前。
我该如何解决这个问题?
不是最好的答案,但它是有效的。我注释掉了"modificationonset"元素,并重新启动了CruiseControl。它现在似乎正在建设我的新项目。构建完成后,我将取消注释该元素。如果有人有更好的答案,我还是想要一个。