0

带有嵌入式容器的 Spring IO jar 与 AngularJS 作为 UI 相得益彰。您可以使用基于 jar 的 spring io 项目(即带有 angularjs 或任何其他 javascript 库的 .html 页面)轻松地处理您的静态资源。

对于基于 Angular 的前端,SpringIO Web 确实是一个完美的选择。

但是,关于将SpringIO打包为jar(而不是WAR)以配合maven构建的GWT的话题,问题似乎不是那么容易解决的。

到目前为止,关于这个主题的唯一相关答案如下。 Spring Boot + GWT 嵌入式配置

实际上,如果您只需要将 GWT 应用程序构建到 springIO jar(一个生产性 jar)中,那么只需确保 GWT javascript 会落入适当的 META-INF/resources 以提供给客户。

然而,在 Java 到 Javascript 的编译尚未发生的开发期间,并且使用传统的 gwt:run 插件,获得有关如何正确设置 pom.xml 的官方响应会很有趣,以便:

(a) 我们使用我们选择的嵌入式容器 tomcat 或 jetty

(b) 在开发期间,我们可以使用 springio devtools 重新启动容器。这对于基于 Spring x Angular 的程序来说就像一个魅力,其中 javascript 资源会立即刷新而无需重新启动,并且类更改会导致重新启动

(c) 仍然可以调试 GWT 应用程序而无需编译完整的怪物

我想知道:人们可以同时使用 GWT 和 Spring IO 进行高效开发的唯一方法是声明: - 我需要两个容器。一个前端码头,用于运行 GWT 部分并提供 javascript 和调试前端。

spring IO 中的后端应用程序,我没有 javascript,但可以有效地让我的 springboot 开发工具类更改 tomcat 重新启动。

在 jetty 和嵌入式 tomcat 之间,使用简单的基于 rest 的 web 服务集成两个 JVM 容器。如果两者都在同一个本地主机上,则网络成本基本上是多余的。但是,如果要进行高效开发,需要一个具有 GWT javascript 的单独容器和具有 SpringIO 业务逻辑的容器,这并不是一个完美的世界。

springio 是否有可能提供 GWT maven pom.xml 以便可以同时使用 GWT 和 SpringIO 高效地工作?

就我而言,我必须说我不喜欢 SpringIO WAR 方法,因为它已经有一个 git 项目可以演示。

如果无法设置带有嵌入式容器的 JAR SpringIO JAR 以形成高效的开发环境,我只需选择两个具有最有效开发 pom.xml 的容器,用于 GWT fornt-end 和 springio 后端的业务逻辑。非常感谢您对此的回复。

4

3 回答 3

2

您可以轻松地将 SuperDevMode 代码服务器作为独立应用程序运行,并且当您更改 GWT 代码中的任何内容时它会重新编译(基本上您最终会得到两个容器:spring boot 和代码服务器)。
如果您指定launchDirSpring Boot 查找其静态 Web 资源的位置,则只需刷新页面即可重新编译。否则,您始终可以使用 boormarklet 手动启动重新编译。

我建议使用 Thomas Broyer 的gwt-maven-plugin

于 2016-01-09T10:12:10.230 回答
0

概念证明是:

步骤 (1) 使用 gwt 2.7 web app creator 生成带有适当 pom 的示例 gwt 项目。在这种情况下,执行 gwt:run 已经提供了一个好的开发环境,只要看到客户端代码在更改时刷新。还不错,但还不够。

步骤 (2) 作为 spring boot 开发工具服务器端刷新的概念证明,保守一点,只需将 jetty 插件添加到 pom.xml 中。jetty 插件为您提供了 GWT 插件所缺少的类似 JRebel 的配置选项,即使它使用了 jetty。GWT 插件不允许您为类路径表示扫描间隔,而 jetty 可以。

 <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.3.0.v20150612</version>
      <configuration>
          <scanIntervalSeconds>10</scanIntervalSeconds>
          <webApp>
              <contextPath>/</contextPath>
          </webApp>
      </configuration>
  </plugin>

步骤 (3) 正如 Umit 所暗示的,在开发期间不必强制使用嵌入式容器运行 gwt。相反,人们可以像以下形式一样高效地工作: mvn war:exploded mvn jetty:run-exploded mvn gwt:gwt-codeserver

这是相当理想的,因为更新 UI 上的代码更改可以使用代码服务器书签来触发重新编译。对于服务器端核心 jrebel 行为,只需在代码更改时使用 mvn exploded:war ,或者修复你的 mvn build 输出目录以进入 WEB-INF/classes ...无论如何,jetty 将 pikcup 文件更改并重新启动 web 应用程序类加载器快速。

同样的原则也适用于 Springboot ......

确实如此。

当使用 GWT+SpringBoot 作为 JAR 时,技巧有两个:

(a) 就像使用我们自己的 jetty:run-exploded 代替 gwt:run 嵌入式 jetty 的 jetty 一样;gwt 插件需要调整为

<noServer>true</noServer>

(b) gwt 插件假设你将 APP 打包为一个战争,事实并非如此。因此,要确保 springboot 应用程序为您的 nocache.js 文件提供服务,您必须确保使用以下形式调整 gwt 插件:

<webappDirectory>${project.build.directory}/classes/META-INF/resources</webappDirectory>

上面的行是一个品味问题。Spring boot 支持多个静态资源文件夹,我只是使用同一个文件夹,您可以在 JEE 应用程序的 JSF 组件 jar 文件中转储四个 JSF 库。

无论如何,很明显 springboot 和 gwt 的插件并没有很好地结合在一起,但是两个 maven 插件一起为我们提供了足够的配置选项,以使事情在开发过程中正常工作。

至于生产模式,很明显它是有效的,只是在组装最终的 jar 之前将资源打包到正确的文件夹中。

最后,springboot + gwt 工作正常,UI 源重新加载以及后端快速类重新加载,无需被迫处理 Eclipse 定制插件,maven 照顾好一切。与 Netbeans 完美匹配。

于 2016-01-13T21:16:50.950 回答
0

在我工作的公司,我们使用基于 GWT 的 SmartGWT 框架。有了这个框架,我们可以很容易地在我们的项目中集成 Spring,您可以很容易地在 SuperDevMode 上调试/运行项目。

于 2016-01-09T10:33:53.270 回答