Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT和SpringBoot—有没有一种聪明的方法来处理相互冲突的依赖关系?_Gwt_Spring Boot_Gwt Super Dev Mode - Fatal编程技术网

GWT和SpringBoot—有没有一种聪明的方法来处理相互冲突的依赖关系?

GWT和SpringBoot—有没有一种聪明的方法来处理相互冲突的依赖关系?,gwt,spring-boot,gwt-super-dev-mode,Gwt,Spring Boot,Gwt Super Dev Mode,在理想的情况下,您可以将GWT应用程序编译成javascript,将其作为静态资源使用,并在幕后将后端代码运行在JVM上,这样生活就会顺利进行。 但这个理想世界称为运行时生产 然而,在开发期间,当您希望使用gwt代码服务器时 您知道,GWT编译时依赖关系在运行时(源代码+类)期间是必需的,用于调试和重新编译GWT模块 同时,您可能希望后端支持spring boot 1.3.5.RELEASE之类的版本 在这种情况下,频繁发布多个版本的spring boot此时希望添加为托管依赖项,例如: <

在理想的情况下,您可以将GWT应用程序编译成javascript,将其作为静态资源使用,并在幕后将后端代码运行在JVM上,这样生活就会顺利进行。 但这个理想世界称为运行时生产

然而,在开发期间,当您希望使用gwt代码服务器时

您知道,GWT编译时依赖关系在运行时(源代码+类)期间是必需的,用于调试和重新编译GWT模块

同时,您可能希望后端支持spring boot 1.3.5.RELEASE之类的版本

在这种情况下,频繁发布多个版本的spring boot此时希望添加为托管依赖项,例如:

<hibernate-validator.version>5.2.4.Final</hibernate-validator.version>
对于某些RPC服务和DTO,您使Gwt前端依赖于后端API。大多数情况下,您只能在前端模块中管理pom.xml依赖项,而与后端模块中的任何依赖项无关。 最终,您将创建一个war或spring boot可运行jar,它将gwt代码作为静态资源携带,并携带后端代码及其所有依赖项,即Hirbernate validator最新版本

然而,在我看来,当您试图获得一个用于开发目的的pom时,您必须全局地管理根pom.xml中后端和前端层之间常见的依赖项,并将依赖项降级到gwt所需的版本

也就是说,在理想世界中。 您的根pom.xml只需声明模块及其生成顺序。您让后端impl能够声明它希望从spring boot starter pom.xml继承依赖项,等等

与理想情况相反,在开发期间实际帮助您的pom.xml配置上。。。 嗯,您可能需要重新访问根pom.xml。 您必须在此根pom.xml上添加托管依赖项,以便对于GWT前端和spring boot后端之间所有常见的冲突依赖项,您始终必须修改GWT的版本并将降级设置到位

这将确保在执行gwt:run、dev模式重新编译等操作时。。。您不会让gwt编译器尝试javascript编译Hibernate版本5,而是gwt 4.1最终版确实支持的版本。当然,有一天,你可能会在后端代码中遇到一个惊喜,因为你已经准备好了这样一个黑客程序

有没有人知道如何正确组织一个多模块项目,允许后端和基于gwt的前端具有相互冲突的依赖性需求

最终,如果答案是否定的,我相信我会更喜欢网络浪费和增加通信延迟,通过使用纯独立spring boot后端,与纯gwt独立jetty集成,该jetty上的后端只会将请求无声地踢到实际的spring boot后端。让gwt jetty后端被UI调用执行1+1操作,并将计算转发到另一个运行sprin boot的后端,该后端实际知道如何执行1+1操作,这有点可怜。。。但是,如果这是最有成效的工作方式,确保发展是有成效的,生产将毫无意外地进行,那就这样吧


感谢您的反馈,理想情况下,我希望看到一个可以作为现有maven项目导入eclipse的多pom项目,并演示如何实现这一点。

找出编译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>

带hibernate的spring依赖
一些弹簧起动装置
org.hibernate
休眠验证器

这样,只有GWT提供的
hibernate
版本在运行时可用

是的,我想做的事实上是可以做到的,尽管不是微不足道的。。。一点也不

为了建立一个maven多模块pom,该pom可以有效地用于后端和前端代码的代码交换,而无需选择gwt验证器依赖项或springboot验证器依赖项,我基本上按照以下方式组织我的项目

你有:

LEVEL 1: myproject-root
----- LEVEL 2: myproject-backend
---------- LEVEL 3: myproject-backend-api
---------- LEVEL 3: myproject-backend-impl
------ LEVEL 2: myproject-frontend
------ LEVEL 2: myproject-runner
-----------LEVEL 3: myproject-runner-jar
-----------LEVEL 3: myproject-runner-war
在myprojectroot中,自然地声明子模块。 您可以对一些无关紧要的插件(如surefire插件)进行依赖关系管理。您可以控制java源代码和目标编译语言。你只做了很少的事。如果您有一些可以交叉配置的插件,那么您最好将它们放在插件管理中

在myproject后端中,通过向依赖关系管理中添加以下内容,基本上可以将springboot依赖关系继承到依赖关系管理中:

<dependencyManagement>
        <dependencies>
            <!-- Inherit dependencies from spring boot dependency management pom -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${version.spring.boot}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

org.springframework.boot
spring启动程序父级
${version.spring.boot}
聚甲醛
进口
你声明了这两个子模块,你就出局了。 这里不声明任何交叉切割依赖项。您只使用依赖关系管理。前端组件将挂接api子模块,您不希望在后端pom中创建依赖项磁铁,因此这里您尽可能保守

在myproject后端api中,首先让该子模块成为jar子模块。接下来,您将希望通过按入口点性质细分api-s来进一步分支api组件。 首先,-api组件将具有服务器和前端之间通信所需的api,类似于文档中常见的“共享”
LEVEL 1: myproject-root
----- LEVEL 2: myproject-backend
---------- LEVEL 3: myproject-backend-api
---------- LEVEL 3: myproject-backend-impl
------ LEVEL 2: myproject-frontend
------ LEVEL 2: myproject-runner
-----------LEVEL 3: myproject-runner-jar
-----------LEVEL 3: myproject-runner-war
<dependencyManagement>
        <dependencies>
            <!-- Inherit dependencies from spring boot dependency management pom -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${version.spring.boot}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
<noServer>true</noServer>
<webappDirectory>${project.build.directory}/classes/META-INF/resources</webappDirectory>