在理想的世界中,您将 GWT 应用程序编译为 javascript,将其作为静态资源提供服务,并且在幕后您的后端代码在 JVM 上运行,并且一切顺利。但是那个理想的世界被称为运行时的生产。
但是,在开发期间,当您想使用 gwt 代码服务器时...
在运行时(源 + 类)需要 GWT 编译时依赖项,用于 GWT 模块的调试和重新编译目的。
同时,您可能希望有类似 spring-boot 1.3.5.RELEASE 的后端支持。
在这种情况下,遭受多次频繁发布的spring boot此时想要添加为托管依赖项,例如:
<hibernate-validator.version>5.2.4.Final</hibernate-validator.version>
当然,这是一件非常好的事情。事实上,它是春天的众多优点之一。
另一方面,Gwt 参见下面的链接, http://www.gwtproject.org/doc/latest/DevGuideValidation.html
仍然要求您使用:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Final</version>
<scope>runtime</scope>
</dependency>
现在,如果您要说:我不关心生产性开发,只需编译一些在生产中正常工作的东西。
那么实际上,您可以通过以这种方式构建项目来轻松解决上述问题:
ROOT
--- Backend-api
--- Backend-Impl
--- Gwt-Front-end
---- War or stand alone Spring jar module to glue it all together
对于某些 RPC 服务和 DTO,您在哪里制作 Gwt-Front 取决于后端 API。pom.xml 依赖项大部分只能在前端模块中管理,与后端的依赖项无关。最终,您制作了一个 war 或 spring boot 可运行 jar,它将您的 gwt 代码作为静态资源携带,并携带您的后端代码及其所有依赖项,即 Hibernate 验证器最新版本。
但是,当您尝试获得可用于开发目的的 pom 时,据我所知,您不得不在全局范围内管理 ROOT 中后端和前端层之间常见的依赖关系pom.xml,并将您的依赖项降级到 gwt 所需的版本。
也就是说,在理想的世界场景中。您的 ROOT pom.xml 只是简单地声明了您的模块以及它们构建的顺序。你让你的后端实现有能力声明它想要从 spring-boot-starter pom.xml 继承依赖项,等等......
与理想情况相反,在开发期间实际上可以帮助您的 pom.xml 配置...好吧,您可能不得不重新访问 Root pom.xml。而且你必须在这个根 pom.xml 上添加托管依赖项,这样对于你的 GWT 前端和 Spring Boot 后端之间所有那些常见的冲突依赖项,你总是必须敲击 GWT 的版本并降级到位。
这将确保当您执行 gwt:run、开发模式重新编译等时...您最终不会让 gwt 编译器尝试 javascript 编译您的 Hibernate 版本 5,而是 GWT 4.1 final 确实支持的版本。当然,您最终可能会对后端代码感到惊讶,其中一个是通过实施这样的黑客...
有没有人知道如何正确组织一个多模块项目,其中允许后端和基于 gwt 的前端具有相互冲突的依赖要求?
最终,如果答案是否定的,我相信我更愿意通过拥有一个与纯 gwt 独立码头集成的纯独立 Spring Boot 后端来浪费网络并增加通信延迟,该码头上的后端无非只是愚蠢地将请求踢到实际的 spring-boot 后端。让 gwt jetty 后端被 UI 调用以执行 1+1 并将计算转发到第二个后端运行的 sprin boot 实际知道如何执行 1+1 ...但如果这是最有成效的工作方式,确保开发是富有成效的,并且生产将毫无意外地运行,那就这样吧。
感谢您的任何反馈,理想情况下,我希望看到一个多 pom 项目,您可以将其作为现有的 maven 项目导入到 eclipse 中,并演示如何实现这一点。