structurizr / lite

Structurizr Lite
https://docs.structurizr.com/lite
MIT License
258 stars 31 forks source link

Error when using structurizr-lite locally: Cannot run program "dot" #11

Closed aranvir closed 2 years ago

aranvir commented 2 years ago

Hi, I receive the following error when trying to run structurizr-lite locally from the .war file (Build 2848).

I can start the server, accept the license agreement, and then go to the diagrams page. This is when the error occurs (see below). I'm running this on Windows 10 with OpenJDK 11.0.14.

Note: In the copy below, I replaced the actual workspace path manually with ****.

2022-10-25 12:32:14.844  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Structurizr Lite
2022-10-25 12:32:14.854  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Build: 2848
2022-10-25 12:32:14.854  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Built: 2022-10-24T17:14:19Z
2022-10-25 12:32:14.854  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : structurizr-java: v1.16.0
2022-10-25 12:32:14.874  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : structurizr-dsl: v1.21.0
2022-10-25 12:32:14.874  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     :
2022-10-25 12:32:14.874  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Workspace path: ****
2022-10-25 12:32:14.874  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Workspace filename: workspace[.dsl|.json]
2022-10-25 12:32:14.874  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : URL:
2022-10-25 12:32:14.884  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Memory: used=74MB; free=79MB; total=154MB; max=2018MB
2022-10-25 12:32:14.894  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Auto-save interval: 5000ms
2022-10-25 12:32:14.894  INFO 18772 --- [           main] com.structurizr.lite.StructurizrLite     : Auto-refresh interval: 0ms
2022-10-25 12:32:26.968  INFO 18772 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'**************************
2022-10-25 12:32:26.968  INFO 18772 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2022-10-25 12:32:26.968  INFO 18772 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
2022-10-25 12:32:31.224  WARN 18772 --- [nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase        : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [365] milliseconds.
java.io.IOException: Cannot run program "dot": CreateProcess error=2, The system cannot find the file specified
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
        at com.structurizr.graphviz.GraphvizAutomaticLayout.runGraphviz(GraphvizAutomaticLayout.java:78)
        at com.structurizr.graphviz.GraphvizAutomaticLayout.apply(GraphvizAutomaticLayout.java:97)
        at com.structurizr.lite.web.GraphvizController.post(GraphvizController.java:66)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1787)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
        at java.base/java.lang.ProcessImpl.create(Native Method)
        at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:487)
        at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:154)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
        ... 54 more
simonbrowndotje commented 2 years ago

I've added a note to https://structurizr.com/share/76352/documentation#troubleshooting about this error message.

aranvir commented 2 years ago

Out of curiosity, can automatic layout be switched off globally as an option in structurizr.properties as well?