当尝试将巡航控制作为一项服务运行时(本例中为Windows 7,64位),我收到错误:
com.thoughtworks.xstream.converters.ConversionException: Cannot construct net.sourceforge.cruisecontrol.BuildLoopInformation as it does not have a no-args constructor
完整的错误消息是:
INFO | jvm 1 | 2012/08/27 17:16:28 | 2012-08-27 17:16:28.262::WARN: /dashboard/buildloop/listener
INFO | jvm 1 | 2012/08/27 17:16:28 | com.thoughtworks.xstream.converters.ConversionException: Cannot construct net.sourceforge.cruisecontrol.BuildLoopInformation as it does not have a no-args constructor
INFO | jvm 1 | 2012/08/27 17:16:28 | ---- Debugging information ----
INFO | jvm 1 | 2012/08/27 17:16:28 | message : Cannot construct net.sourceforge.cruisecontrol.BuildLoopInformation as it does not have a no-args constructor
INFO | jvm 1 | 2012/08/27 17:16:28 | cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
INFO | jvm 1 | 2012/08/27 17:16:28 | cause-message : Cannot construct net.sourceforge.cruisecontrol.BuildLoopInformation as it does not have a no-args constructor
INFO | jvm 1 | 2012/08/27 17:16:28 | class : net.sourceforge.cruisecontrol.BuildLoopInformation
INFO | jvm 1 | 2012/08/27 17:16:28 | required-type : net.sourceforge.cruisecontrol.BuildLoopInformation
INFO | jvm 1 | 2012/08/27 17:16:28 | path : /buildloop
INFO | jvm 1 | 2012/08/27 17:16:28 | line number : 1
INFO | jvm 1 | 2012/08/27 17:16:28 | -------------------------------
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:63)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:117)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:846)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:833)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.XStream.fromXML(XStream.java:781)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.XStream.fromXML(XStream.java:773)
INFO | jvm 1 | 2012/08/27 17:16:28 | at net.sourceforge.cruisecontrol.util.BuildInformationHelper.toObject(BuildInformationHelper.java:32)
INFO | jvm 1 | 2012/08/27 17:16:28 | at net.sourceforge.cruisecontrol.dashboard.web.BuildLoopController.handleRequestInternal(BuildLoopController.java:28)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:858)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
INFO | jvm 1 | 2012/08/27 17:16:28 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
INFO | jvm 1 | 2012/08/27 17:16:28 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.Server.handle(Server.java:324)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
INFO | jvm 1 | 2012/08/27 17:16:28 | at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
INFO | jvm 1 | 2012/08/27 17:16:28 | Caused by: com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Cannot construct net.sourceforge.cruisecontrol.BuildLoopInformation as it does not have a no-args constructor
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.newInstance(PureJavaReflectionProvider.java:59)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:257)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:124)
INFO | jvm 1 | 2012/08/27 17:16:28 | at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
INFO | jvm 1 | 2012/08/27 17:16:28 | ... 35 more
事实证明,Java 7中的某些功能不太好,所以只需回滚到Java 6即可。
获取Java 6可能有点困难,因为Java官方网站上没有提供它。
我没有安装Java6,而是使用了本博客中描述的方法:CruiseControl 2.8.4和JDK7:
或者将lib/和ebapps/dashboard/WEB-INF/lib/中的xstream-1.2.2.jar和xpp3_min-1.1.3.4.O.jar文件分别替换为xstream-14.1.jar和kxml2-2.3.0.jar。
成功了!