gwt - GWT和SpringBoot-是否存在解决冲突依赖关系的明智方法?

标签 gwt spring-boot gwt-super-dev-mode

在理想的世界中,您已将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/

相关文章:

java - 使用元素创建时 GWT FocusPanel clickHandler 不工作

javascript - firebug 没有显示完整的 js 文件来调试、放置 breka 点

Gwt super 开发模式 : recompile doesn't work

java - 无法运行Maven和Spring Boot打包的可执行jar

spring - 为什么在未设置安全性的情况下, Spring 复位 Controller 会未经授权返回

java - 如何让 GWT Super Dev Mode/SuperDevMode 包含我的 html 文件?

gwt - 远程服务器上的 super 开发模式

eclipse - Eclipse 3.7 的 Google 插件未显示

GWT:将客户端错误/堆栈跟踪发送到服务器?

java - 如何打印 Spring Boot 加载的所有配置?