在理想的世界中,您已将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依赖项,而与后端中的依赖项无关。
最终,您将进行战争或Spring Boot可运行的jar,将gwt代码作为静态资源进行传输,并随其所有依赖项(即Hirbernate验证程序的最新版本)一起承载后端代码。
但是,据我所知,当您尝试使用一种可用于开发目的的pom时,您就不得不全局性地管理ROOT后端和前端层之间常见的依赖关系pom.xml,并将您的依赖项降级为gwt所需的版本。
也就是说,在理想的世界场景中。
您具有ROOT pom.xml,只需声明模块及其构建顺序即可。然后,您可以让后端impl拥有声明其想要从spring-boot-starter pom.xml等继承依赖项的能力。
与理想方案相反,在开发期间实际上对您有帮助的pom.xml配置...
好吧,您可能必须重新访问Root pom.xml。
并且您必须在此根pom.xml上添加托管依赖项,以便对于GWT前端和spring boot后端之间所有常见的冲突依赖项,您始终必须锤击GWT的版本并进行降级到位。
这样可以确保当您执行gwt:run,dev模式重新编译等时,您不会最终让gwt编译器尝试用javascript编译Hibernate版本5,而是GWT 4.1 final确实支持的版本。当然,您可能最终会对后端代码感到吃惊,其中之一就是通过放置这样的hack。
是否有人对如何正确组织一个多模块项目(允许后端和基于gwt的前端具有相互矛盾的视域要求)有一个想法?
最终,如果答案是否定的,我相信我会更喜欢网络浪费和通信延迟,方法是拥有一个纯独立的spring boot后端,该后端与一个纯gwt独立的jetty集成在一起,该码头上的后端只是愚蠢地将请求踢到实际的spring-boot后端。让gwt码头后端被UI调用做1 + 1,并将计算转发到第二个运行sprin boot的后端,这实际上是知道如何做1 + 1的,这有点可悲。但是,如果这是最有生产力的工作方式,请确保开发具有生产力,并且生产将毫无意外地进行,那就这样吧。
谢谢您的反馈,理想情况下,我希望看到一个多pom项目,您可以将其作为现有的maven项目导入eclipse,并演示如何实现。
最佳答案
找出在编译GWT代码时要排除的传递依赖性在哪里。
<dependency>
<groupId>spring-dependency-with-hibernate</groupId>
<artifactId>some-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</exclusion>
</exclusions>
</dependency>
这样,只有GWT提供的
hibernate
版本将在运行时可用。
关于gwt - GWT和SpringBoot-是否存在解决冲突依赖关系的明智方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286474/