Java 如何配置mvn/Jrebel/wtp/gwt/eclipse以顺利处理服务接口上的更改
我开始使用来自Thomas Broyer的新maven gwt插件研究Java 如何配置mvn/Jrebel/wtp/gwt/eclipse以顺利处理服务接口上的更改,java,eclipse,maven,gwt,jrebel,Java,Eclipse,Maven,Gwt,Jrebel,我开始使用来自Thomas Broyer的新maven gwt插件研究guice rf活动工件 我对代码进行了一些修改,并在服务器端的GreetingService上添加了一个函数。我沿着路径添加所需的位和字节,直到代码正确地调用greetServer或greetServer方法 我发现,简单的SDM重新编译并不能使该方法在服务器上可用。重新启动Tomcat也无济于事。在eclipse中保存文件没有正确触发编译 最后,运行完整的模块编译成功了 我认为这是一个问题,因为服务的任何变化都可能给你一些
guice rf活动
工件
我对代码进行了一些修改,并在服务器端的GreetingService
上添加了一个函数。我沿着路径添加所需的位和字节,直到代码正确地调用greetServer
或greetServer
方法
我发现,简单的SDM重新编译并不能使该方法在服务器上可用。重新启动Tomcat也无济于事。在eclipse中保存文件没有正确触发编译
最后,运行完整的模块编译成功了
我认为这是一个问题,因为服务的任何变化都可能给你一些时间在大型项目上喝咖啡。是否有一些我没有做的“技巧”,或者RequestFactory代码生成的复杂性如此之高,以至于我不能简单地使用SDM+JRebel或服务器重启来更改服务接口
更新:如果你打算用maven tomcat目标启动你的tomcat,Thomas所描述的方法(谢谢!)是有效的
UPDATE2:描述了运行wtp/eclipse/mvn/Jrebel的launcherDir
方法
如果您想使用eclipse wtp tomcat启动器和我所做的JRebel动态编译您的服务器类,JRebel重新加载将不会捕获分散的RF服务名称。要解决此问题,请将以下JVM属性添加到wtp启动配置(谢谢,Thomas!):
-Dgwt.rf.ServiceLayerCache=false
当服务器接口更改时,会发生以下情况(EclipseLuna服务版本2(4.4.2),JRebel6.x):
- 根据需要更改服务和上下文类
- 您会看到JRebel正在重新加载该类
- 在命令行上调用
mvn进程类
- 您会看到JRebel正在重新加载模糊工厂
- SDM在浏览器中编译(F5将完成此操作)
- 您的服务现在正在客户端中工作
src/main/webapp
文件夹需要包含您的GWT代码文件夹。
为了实现这一点,必须指示codeserver在正确的位置生成SDM存根。将属性添加到模块/pom.xml
,如下所示:
<properties>
<gwt.launcherDir>${project.build.directory}/gwt/launcherDir</gwt.launcherDir>
</properties>
这样,“在f5上重新编译”工作得非常好和顺利。这最终是eclipse中GWT与maven和JRebel的完全集成。哇!@TBroyer:-)的荣誉客户端不需要任何特殊的东西。不过,服务器端需要验证工具处理
RequestFactory
及其所有RequestContext
和代理层次结构
从命令行,在原型的上下文中,这意味着在*-server
模块上启动流程类
阶段,例如
mvn process-classes -pl *-server -am
运行mvntomcat7:run-Denv=dev
时,Tomcat应该检测到类的更改并自动重新加载webapp
然后只需在浏览器中刷新页面,在再次验证(在Tomcat中重新加载webapp会丢失会话/验证)之后,您就可以看到端到端的更改
复制步骤:
http://localhost:8080
在浏览器中,登录到webapp,注意客户端应用程序会自动编译(这是GWT 2.7中的新SDM)*-shared/src/main/java/**/GreetingContext.java
并将greetServer
复制为griteserver
*-server/src/main/java/**/GreetingService.java
并复制greetServer
和侮辱服务器
(将Hello
消息更改为侮辱以感受更改)*-client/src/main/java/**/GreetingActivity.java
并将对greetServer
的调用替换为对greetServer
的调用(或添加另一个按钮并复制代码)mvn进程类-pl*-server-am
;注意,Tomcat会重新加载webappmvn流程类
),或者您可以从Eclipse中启动mvn流程类
)
请注意,我建议不要从Eclipse内部启动
mvn gwt:codeserver
和mvn tomcat7:run
,因为Eclipse硬杀死进程,这通常会导致codeserver
保持活动状态(这是一个分叉进程),并且不会运行JVM关闭挂钩或ServletContextListener
的contextDestroyed
可能是注释处理器在更改后没有运行吗?这是服务器所必需的(然后在服务器中重新加载webapp)。客户端应该可以正常工作™ 虽然我必须承认我还没有验证过,但是浏览器刷新了。我会在找到时间后再试。客户端立即工作(虽然必须点击浏览器中的“编译”按钮),但apt编译器没有
mvn -Dgwt.launcherDir=module-app-server\src\main\webapp gwt:codeserver
mvn process-classes -pl *-server -am