Exception in thread "main" java.lang.RuntimeException: Failed to build project dependencies: /home/bhu/devel/workspace-toplogic-studio/com.top_logic.graph.diagramjs.server
at com.top_logic.basic.core.workspace.Workspace.buildDependencies(Workspace.java:617)
at com.top_logic.basic.core.workspace.Workspace.getDirectDependencies(Workspace.java:195)
at com.top_logic.basic.core.workspace.Workspace.fillTransitiveDependencies(Workspace.java:596)
at com.top_logic.basic.core.workspace.Workspace.fillTransitiveDependencies(Workspace.java:605)
at com.top_logic.basic.core.workspace.Workspace.getTransitiveDependencies(Workspace.java:177)
at com.top_logic.basic.core.workspace.Workspace.getResourcePath(Workspace.java:117)
at com.top_logic.basic.core.workspace.Workspace.getResourcePath(Workspace.java:87)
at com.top_logic.ide.jetty.Bootstrap.start(Bootstrap.java:109)
at com.top_logic.ide.jetty.Bootstrap.run(Bootstrap.java:93)
at com.top_logic.ide.jetty.Bootstrap.main(Bootstrap.java:66)
Caused by: java.io.IOException: Cannot resolve project directory for 'com.top_logic.graph.diagramjs.client': '/home/bhu/devel/workspace-toplogic-studio' is neither an Eclipse workspace nor does it contain a subfolder named 'com.top_logic.graph.diagramjs.client'.
at com.top_logic.basic.core.workspace.Workspace.resolveProjectDir(Workspace.java:213)
at com.top_logic.basic.core.workspace.Workspace.tryBuildDependencies(Workspace.java:650)
at com.top_logic.basic.core.workspace.Workspace.buildDependencies(Workspace.java:615)
... 9 more
Workaround
- Remove the project dependency `com.top_logic.graph.diagramjs.client` from the module `com.top_logic.graph.diagramjs.server`.
Analysis
GWT modules are referenced by their server modules not as classpath dependencies but as project references. This is done so that the GWT modules are built before their server modules, allowing the resulting JavaScript to be served by the server module. However, GWT modules are not included in the TL Studio package, as they are no longer needed for development. On the other hand, project dependencies are used to determine a module’s resource path. This, in turn, is necessary so that pure JavaScript projects can provide an application configuration by including their JavaScript files in the application configuration. To do this, they require a dependency on tl-core, as only tl-core provides the corresponding configuration interfaces.
Solution
Project dependencies are treated only as optional dependencies at runtime. If they exist, they are included in the resource path. If they do not exist, they are ignored.
Test
- In tl-studio, launch the tl-demo module in Eclipse.
- Build a WAR of tl-demo from tl-studio.